import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	}

	// 行列生成と行列内容入力、行列(long2次元配列)を返す
	static long[][] CreateMatrix(int y, int x) {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	}

	// 行列の積計算し、計算結果の行列(long二次元配列)を返す
	static long[][] MatrixMultiplication(long[][] A, long[][] B) {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	}

	// 表示処理
	static void Print(long[][] C) {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	}

}
 import java.util.Scanner; Scanner java.util public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	}

	// 行列生成と行列内容入力、行列(long2次元配列)を返す
	static long[][] CreateMatrix(int y, int x) {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	}

	// 行列の積計算し、計算結果の行列(long二次元配列)を返す
	static long[][] MatrixMultiplication(long[][] A, long[][] B) {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	}

	// 表示処理
	static void Print(long[][] C) {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	}

} Main static Scanner sc = new Scanner(System.in); sc new Scanner(System.in) public static void main(String[] args) {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	} main {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	} int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int m = sc.nextInt(); m sc.nextInt() sc.nextInt sc int l = sc.nextInt(); l sc.nextInt() sc.nextInt sc long[][] A = CreateMatrix(n, m); A CreateMatrix(n, m) CreateMatrix n m long[][] B = CreateMatrix(m, l); B CreateMatrix(m, l) CreateMatrix m l long[][] C = MatrixMultiplication(A, B); C MatrixMultiplication(A, B) MatrixMultiplication A B Print(C) Print C String[] args args // 行列生成と行列内容入力、行列(long2次元配列)を返す
	static long[][] CreateMatrix(int y, int x) {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	} CreateMatrix {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	} long[][] Matrix = new long[y][x]; Matrix new long[y][x] y x for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		} int i = 0; int i = 0; i 0 i < y i y i++ i++ i {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		} {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		} for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			} int k = 0; int k = 0; k 0 k < x k x k++ k++ k {

				// 入力
				Matrix[i][k] = sc.nextInt();
			} {

				// 入力
				Matrix[i][k] = sc.nextInt();
			} Matrix[i][k] = sc.nextInt() Matrix[i][k] Matrix[i] Matrix i k sc.nextInt() sc.nextInt sc return Matrix; Matrix int y y int x x // 行列の積計算し、計算結果の行列(long二次元配列)を返す
	static long[][] MatrixMultiplication(long[][] A, long[][] B) {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	} MatrixMultiplication {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	} long[][] C = new long[A.length][B[0].length]; C new long[A.length][B[0].length] A.length A A.length B[0].length B[0] B 0 B[0].length for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		} int k = 0; int k = 0; k 0 k < B.length k B.length B B.length k++ k++ k {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		} {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		} for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			} int i = 0; int i = 0; i 0 i < A.length i A.length A A.length i++ i++ i {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			} {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			} for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				} int j = 0; int j = 0; j 0 j < B[0].length j B[0].length B[0] B 0 B[0].length j++ j++ j {

					C[i][j] += A[i][k] * B[k][j];
				} {

					C[i][j] += A[i][k] * B[k][j];
				} C[i][j] += A[i][k] * B[k][j] C[i][j] C[i] C i j A[i][k] * B[k][j] A[i][k] A[i] A i k B[k][j] B[k] B k j return C; C long[][] A A long[][] B B // 表示処理
	static void Print(long[][] C) {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	} Print {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	} for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		} int i = 0; int i = 0; i 0 i < C.length i C.length C C.length i++ i++ i {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		} {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		} System.out.print(C[i][0]) System.out.print System.out System System.out C[i][0] C[i] C i 0 for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			} int j = 1; int j = 1; j 1 j < C[0].length j C[0].length C[0] C 0 C[0].length j++ j++ j {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			} {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			} System.out.print(" " + C[i][j]) System.out.print System.out System System.out " " + C[i][j] " " C[i][j] C[i] C i j System.out.println() System.out.println System.out System System.out long[][] C C public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	}

	// 行列生成と行列内容入力、行列(long2次元配列)を返す
	static long[][] CreateMatrix(int y, int x) {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	}

	// 行列の積計算し、計算結果の行列(long二次元配列)を返す
	static long[][] MatrixMultiplication(long[][] A, long[][] B) {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	}

	// 表示処理
	static void Print(long[][] C) {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	}

} public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	}

	// 行列生成と行列内容入力、行列(long2次元配列)を返す
	static long[][] CreateMatrix(int y, int x) {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	}

	// 行列の積計算し、計算結果の行列(long二次元配列)を返す
	static long[][] MatrixMultiplication(long[][] A, long[][] B) {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	}

	// 表示処理
	static void Print(long[][] C) {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	}

} Main
import java.util.Scanner;

public class Main {

	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		// 1行目入力
		int n = sc.nextInt();
		int m = sc.nextInt();
		int l = sc.nextInt();

		// 行列の生成と行列内容入力
		long[][] A = CreateMatrix(n, m);
		long[][] B = CreateMatrix(m, l);

		// 行列の積計算
		long[][] C = MatrixMultiplication(A, B);

		// 表示処理
		Print(C);

	}

	// 行列生成と行列内容入力、行列(long2次元配列)を返す
	static long[][] CreateMatrix(int y, int x) {
		long[][] Matrix = new long[y][x];
		for (int i = 0; i < y; i++) {

			for (int k = 0; k < x; k++) {

				// 入力
				Matrix[i][k] = sc.nextInt();
			}
		}
		return Matrix;
	}

	// 行列の積計算し、計算結果の行列(long二次元配列)を返す
	static long[][] MatrixMultiplication(long[][] A, long[][] B) {
		long[][] C = new long[A.length][B[0].length];
		for (int k = 0; k < B.length; k++) {

			for (int i = 0; i < A.length; i++) {

				for (int j = 0; j < B[0].length; j++) {

					C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
		return C;
	}

	// 表示処理
	static void Print(long[][] C) {
		// System.out.println(C.length);
		for (int i = 0; i < C.length; i++) {
			System.out.print(C[i][0]);
			for (int j = 1; j < C[0].length; j++) {
				// 数字の間にスペースを入れる
				System.out.print(" " + C[i][j]);
			}
			System.out.println();

		}
	}

}

