import java.util.Scanner;

class Main {
  public static void main(String args[]) {
	  	Scanner scanner = new Scanner(System.in);
	  	int  matrixALine = scanner.nextInt();
	  	int  matrixARow = scanner.nextInt();
	  	int  matrixBRow = scanner.nextInt();
	  	long[][] arrayA;//配列確保
	  	long[][] arrayB;//配列確保
	  	long[][] arrayC;//配列確保
		arrayA = new long[matrixALine + 10][matrixARow + 10];
		arrayB = new long[matrixARow + 10][matrixBRow + 10];
		arrayC = new long[matrixALine + 10][matrixBRow + 10];
		long sum = 0;
  	
		//初期化
		
		// Aのデータ入力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		}
		// Bのデータ入力
		for (int i = 0; i < matrixARow; i++) {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		}
		
		// Cのデータ作成
		for(int i = 0; i < matrixALine; i ++){
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		}
  		
		//出力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		}
		scanner.close();
	}
}
 import java.util.Scanner; Scanner java.util class Main {
  public static void main(String args[]) {
	  	Scanner scanner = new Scanner(System.in);
	  	int  matrixALine = scanner.nextInt();
	  	int  matrixARow = scanner.nextInt();
	  	int  matrixBRow = scanner.nextInt();
	  	long[][] arrayA;//配列確保
	  	long[][] arrayB;//配列確保
	  	long[][] arrayC;//配列確保
		arrayA = new long[matrixALine + 10][matrixARow + 10];
		arrayB = new long[matrixARow + 10][matrixBRow + 10];
		arrayC = new long[matrixALine + 10][matrixBRow + 10];
		long sum = 0;
  	
		//初期化
		
		// Aのデータ入力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		}
		// Bのデータ入力
		for (int i = 0; i < matrixARow; i++) {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		}
		
		// Cのデータ作成
		for(int i = 0; i < matrixALine; i ++){
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		}
  		
		//出力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		}
		scanner.close();
	}
} Main public static void main(String args[]) {
	  	Scanner scanner = new Scanner(System.in);
	  	int  matrixALine = scanner.nextInt();
	  	int  matrixARow = scanner.nextInt();
	  	int  matrixBRow = scanner.nextInt();
	  	long[][] arrayA;//配列確保
	  	long[][] arrayB;//配列確保
	  	long[][] arrayC;//配列確保
		arrayA = new long[matrixALine + 10][matrixARow + 10];
		arrayB = new long[matrixARow + 10][matrixBRow + 10];
		arrayC = new long[matrixALine + 10][matrixBRow + 10];
		long sum = 0;
  	
		//初期化
		
		// Aのデータ入力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		}
		// Bのデータ入力
		for (int i = 0; i < matrixARow; i++) {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		}
		
		// Cのデータ作成
		for(int i = 0; i < matrixALine; i ++){
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		}
  		
		//出力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		}
		scanner.close();
	} main {
	  	Scanner scanner = new Scanner(System.in);
	  	int  matrixALine = scanner.nextInt();
	  	int  matrixARow = scanner.nextInt();
	  	int  matrixBRow = scanner.nextInt();
	  	long[][] arrayA;//配列確保
	  	long[][] arrayB;//配列確保
	  	long[][] arrayC;//配列確保
		arrayA = new long[matrixALine + 10][matrixARow + 10];
		arrayB = new long[matrixARow + 10][matrixBRow + 10];
		arrayC = new long[matrixALine + 10][matrixBRow + 10];
		long sum = 0;
  	
		//初期化
		
		// Aのデータ入力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		}
		// Bのデータ入力
		for (int i = 0; i < matrixARow; i++) {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		}
		
		// Cのデータ作成
		for(int i = 0; i < matrixALine; i ++){
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		}
  		
		//出力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		}
		scanner.close();
	} Scanner scanner = new Scanner(System.in); scanner new Scanner(System.in) int  matrixALine = scanner.nextInt(); matrixALine scanner.nextInt() scanner.nextInt scanner int  matrixARow = scanner.nextInt(); matrixARow scanner.nextInt() scanner.nextInt scanner int  matrixBRow = scanner.nextInt(); matrixBRow scanner.nextInt() scanner.nextInt scanner long[][] arrayA; arrayA long[][] arrayB; arrayB long[][] arrayC; arrayC arrayA = new long[matrixALine + 10][matrixARow + 10] arrayA new long[matrixALine + 10][matrixARow + 10] matrixALine + 10 matrixALine 10 matrixARow + 10 matrixARow 10 arrayB = new long[matrixARow + 10][matrixBRow + 10] arrayB new long[matrixARow + 10][matrixBRow + 10] matrixARow + 10 matrixARow 10 matrixBRow + 10 matrixBRow 10 arrayC = new long[matrixALine + 10][matrixBRow + 10] arrayC new long[matrixALine + 10][matrixBRow + 10] matrixALine + 10 matrixALine 10 matrixBRow + 10 matrixBRow 10 long sum = 0; sum 0 for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		} int i = 0; int i = 0; i 0 i < matrixALine i matrixALine i++ i++ i {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		} {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		} for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    } int j = 0; int j = 0; j 0 j < matrixARow j matrixARow j++ j++ j {
				arrayA[i][j] = scanner.nextInt();
		    } {
				arrayA[i][j] = scanner.nextInt();
		    } arrayA[i][j] = scanner.nextInt() arrayA[i][j] arrayA[i] arrayA i j scanner.nextInt() scanner.nextInt scanner for (int i = 0; i < matrixARow; i++) {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		} int i = 0; int i = 0; i 0 i < matrixARow i matrixARow i++ i++ i {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		} {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		} for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    } int j = 0; int j = 0; j 0 j < matrixBRow j matrixBRow j++ j++ j {
				arrayB[i][j] = scanner.nextInt();
		    } {
				arrayB[i][j] = scanner.nextInt();
		    } arrayB[i][j] = scanner.nextInt() arrayB[i][j] arrayB[i] arrayB i j scanner.nextInt() scanner.nextInt scanner for(int i = 0; i < matrixALine; i ++){
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		} int i = 0; int i = 0; i 0 i < matrixALine i matrixALine i ++ i ++ i {
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		} {
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		} for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			} int k  = 0; int k  = 0; k 0 k <matrixBRow k matrixBRow k ++ k ++ k {
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			} {
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			} for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				} int j = 0; int j = 0; j 0 j < matrixARow j matrixARow j ++ j ++ j {
					sum += arrayA[i][j] * arrayB[j][k];
				} {
					sum += arrayA[i][j] * arrayB[j][k];
				} sum += arrayA[i][j] * arrayB[j][k] sum arrayA[i][j] * arrayB[j][k] arrayA[i][j] arrayA[i] arrayA i j arrayB[j][k] arrayB[j] arrayB j k arrayC[i][k] = sum arrayC[i][k] arrayC[i] arrayC i k sum sum = 0 sum 0 for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		} int i = 0; int i = 0; i 0 i < matrixALine i matrixALine i++ i++ i {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		} {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		} for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    } int j = 0; int j = 0; j 0 j < matrixBRow j matrixBRow j++ j++ j {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    } {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    } if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " "); j == (matrixBRow -1) j (matrixBRow -1) matrixBRow 1 System.out.println(arrayC[i][j] ) System.out.println System.out System System.out arrayC[i][j] arrayC[i] arrayC i j System.out.print(arrayC[i][j] + " ") System.out.print System.out System System.out arrayC[i][j] + " " arrayC[i][j] arrayC[i] arrayC i j " " scanner.close() scanner.close scanner String args[] args
import java.util.Scanner;

class Main {
  public static void main(String args[]) {
	  	Scanner scanner = new Scanner(System.in);
	  	int  matrixALine = scanner.nextInt();
	  	int  matrixARow = scanner.nextInt();
	  	int  matrixBRow = scanner.nextInt();
	  	long[][] arrayA;//配列確保
	  	long[][] arrayB;//配列確保
	  	long[][] arrayC;//配列確保
		arrayA = new long[matrixALine + 10][matrixARow + 10];
		arrayB = new long[matrixARow + 10][matrixBRow + 10];
		arrayC = new long[matrixALine + 10][matrixBRow + 10];
		long sum = 0;
  	
		//初期化
		
		// Aのデータ入力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixARow; j++) {
				arrayA[i][j] = scanner.nextInt();
		    }
		}
		// Bのデータ入力
		for (int i = 0; i < matrixARow; i++) {
			for (int j = 0; j < matrixBRow; j++) {
				arrayB[i][j] = scanner.nextInt();
		    }
		}
		
		// Cのデータ作成
		for(int i = 0; i < matrixALine; i ++){
			for(int k  = 0; k <matrixBRow; k ++){
				for(int j = 0; j < matrixARow; j ++){
					sum += arrayA[i][j] * arrayB[j][k];
				}
				arrayC[i][k] = sum;
				sum = 0;
			}
		}
  		
		//出力
		for (int i = 0; i < matrixALine; i++) {
			for (int j = 0; j < matrixBRow; j++) {
		        if(j == (matrixBRow -1) )
					System.out.println(arrayC[i][j] );
		        else
					System.out.print(arrayC[i][j] + " ");
		    }
		}
		scanner.close();
	}
}

