import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static final int BIG_NUM  = 2000000000;
	public static final int MOD  = 1000000007;

	public static void main(String[] args) {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io public class Main {

	public static final int BIG_NUM  = 2000000000;
	public static final int MOD  = 1000000007;

	public static void main(String[] args) {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
} Main public static final int BIG_NUM  = 2000000000; BIG_NUM 2000000000 public static final int MOD  = 1000000007; MOD 1000000007 public static void main(String[] args) {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	} main {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	} BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} IOException e {
			e.printStackTrace();
		} e.printStackTrace() e.printStackTrace e {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} String buffer[] = br.readLine().split("\\s+"); buffer br.readLine().split("\\s+") br.readLine().split br.readLine() br.readLine br "\\s+" int N = Integer.parseInt(buffer[0]); N Integer.parseInt(buffer[0]) Integer.parseInt Integer buffer[0] buffer 0 int M = Integer.parseInt(buffer[1]); M Integer.parseInt(buffer[1]) Integer.parseInt Integer buffer[1] buffer 1 int L = Integer.parseInt(buffer[2]); L Integer.parseInt(buffer[2]) Integer.parseInt Integer buffer[2] buffer 2 int A[][] = new int[N][M]; A new int[N][M] N M int B[][] = new int[M][L]; B new int[M][L] M L String buf_A[] = new String[M]; buf_A new String[M] M String buf_B[] = new String[L]; buf_B new String[L] L for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			} int row = 0; int row = 0; row 0 row < N row N row++ row++ row {
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			} {
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			} buf_A = br.readLine().split("\\s+") buf_A br.readLine().split("\\s+") br.readLine().split br.readLine() br.readLine br "\\s+" for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				} int col = 0; int col = 0; col 0 col < M col M col++ col++ col {
					A[row][col] = Integer.parseInt(buf_A[col]);
				} {
					A[row][col] = Integer.parseInt(buf_A[col]);
				} A[row][col] = Integer.parseInt(buf_A[col]) A[row][col] A[row] A row col Integer.parseInt(buf_A[col]) Integer.parseInt Integer buf_A[col] buf_A col for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			} int row = 0; int row = 0; row 0 row < M row M row++ row++ row {
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			} {
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			} buf_B = br.readLine().split("\\s+") buf_B br.readLine().split("\\s+") br.readLine().split br.readLine() br.readLine br "\\s+" for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				} int col = 0; int col = 0; col 0 col < L col L col++ col++ col {
					B[row][col] = Integer.parseInt(buf_B[col]);
				} {
					B[row][col] = Integer.parseInt(buf_B[col]);
				} B[row][col] = Integer.parseInt(buf_B[col]) B[row][col] B[row] B row col Integer.parseInt(buf_B[col]) Integer.parseInt Integer buf_B[col] buf_B col Long ans; ans for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			} int A_row = 0; int A_row = 0; A_row 0 A_row < N A_row N A_row++ A_row++ A_row {
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			} {
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			} for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				} int B_col = 0; int B_col = 0; B_col 0 B_col < L B_col L B_col++ B_col++ B_col {
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				} {
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				} ans = 0L ans 0L for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					} int B_row = 0; int B_row = 0; B_row 0 B_row < M B_row M B_row++ B_row++ B_row {
						ans += A[A_row][B_row]*B[B_row][B_col];
					} {
						ans += A[A_row][B_row]*B[B_row][B_col];
					} ans += A[A_row][B_row]*B[B_row][B_col] ans A[A_row][B_row]*B[B_row][B_col] A[A_row][B_row] A[A_row] A A_row B_row B[B_row][B_col] B[B_row] B B_row B_col if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					} B_col == 0 B_col 0 {
						System.out.printf("%d", ans);
					} System.out.printf("%d", ans) System.out.printf System.out System System.out "%d" ans {
						System.out.printf(" %d", ans);
					} System.out.printf(" %d", ans) System.out.printf System.out System System.out " %d" ans System.out.printf("\n") System.out.printf System.out System System.out "\n" String[] args args public class Main {

	public static final int BIG_NUM  = 2000000000;
	public static final int MOD  = 1000000007;

	public static void main(String[] args) {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
} public class Main {

	public static final int BIG_NUM  = 2000000000;
	public static final int MOD  = 1000000007;

	public static void main(String[] args) {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static final int BIG_NUM  = 2000000000;
	public static final int MOD  = 1000000007;

	public static void main(String[] args) {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		try {
			String buffer[] = br.readLine().split("\\s+");

			int N = Integer.parseInt(buffer[0]);
			int M = Integer.parseInt(buffer[1]);
			int L = Integer.parseInt(buffer[2]);

			int A[][] = new int[N][M];
			int B[][] = new int[M][L];

			String buf_A[] = new String[M];
			String buf_B[] = new String[L];

			for(int row = 0; row < N; row++){
				buf_A = br.readLine().split("\\s+");
				for(int col = 0; col < M; col++){
					A[row][col] = Integer.parseInt(buf_A[col]);
				}
			}

			for(int row = 0; row < M; row++){
				buf_B = br.readLine().split("\\s+");
				for(int col = 0; col < L; col++){
					B[row][col] = Integer.parseInt(buf_B[col]);
				}
			}

			Long ans;

			for(int A_row = 0; A_row < N; A_row++){
				for(int B_col = 0; B_col < L; B_col++){
					ans = 0L;
					for(int B_row = 0; B_row < M; B_row++){
						ans += A[A_row][B_row]*B[B_row][B_col];
					}
					if(B_col == 0){
						System.out.printf("%d", ans);
					}else{
						System.out.printf(" %d", ans);
					}
				}
				System.out.printf("\n");
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


