Intercalar colunas de duas matrizes em uma nova

Boa tarde, desenvolvi um algoritmo mas estou tendo problemas na execução, já que algum vetor está estourando. Preciso intercalar os valores das colunas de duas matrizes em uma nova matriz. O que estou deixando passar? Desde já, muito obrigado!

import java.util.Scanner;

public class IntercalarColunas {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);

    int n = (int)(Math.random() * 10) + 2;
    int m = (int)(Math.random() * 10) + 2;
    int p = (int)(Math.random() * 10) + 2;
    
    System.out.println(n);
    System.out.println(m);
    System.out.println(p);
    
    int x[][] = new int[n][m];
    int y[][] = new int[n][p];
    int z[][] = new int[n][m + p];
    
    for( int i = 0; i < x.length; i++ ){
    	for( int j = 0; j < x[i].length; j++ ){
        	x[i][j] = (int)(Math.random() * 10);
        }	
    }
    
    for( int i = 0; i < y.length; i++ ){
    	for( int j = 0; j < y[i].length; j++ ){
        	y[i][j] = (int)(Math.random() * 10);
        }	
    }
    
    int q = 0, k = 0, t = 0, h = 0;
    
    for( int i = 0; i < z.length; i++){
    	for( int j = 0; j < z[i].length; ){
    		
    		if( q < m ){
    			z[i][j++] = x[q][k++];
    		}
    		
    		if( t < p ){
    			z[i][j++] = y[t][h++];
    		}
        	
        }	
        
    	t++;
    	q++;
    	k = 0;
        h = 0;
       
    }
    
    System.out.println("\nVETOR X\n");
    for( int i = 0; i < x.length; i++ ){
    	for( int j = 0; j < x[i].length; j++ ){
        	System.out.print(x[i][j] + " ");
        }
        System.out.print("\n");	
    }
    
    System.out.println("\n\nVETOR Y\n");
    for( int i = 0; i < y.length; i++ ){
    	for( int j = 0; j < y[i].length; j++ ){
        	System.out.print(y[i][j] + " ");
        }	
        System.out.print("\n");	
    }
    
     System.out.println("\n\nVETOR Z\n");
    for( int i = 0; i < z.length; i++ ){
    	for( int j = 0; j < z[i].length; j++ ){
        	System.out.print(z[i][j] + " ");
        }	
        System.out.print("\n");	
    }
}

}