import java.io.*;

class Main{
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int in[] = parseInts(br.readLine().split(" "));
		long in1[][] = new long[in[0]][in[1]];
		long in2[][] = new long[in[1]][in[2]];
		long in3[][] = new long[in[0]][in[2]];
		for(int i=0; i<in[0]; i++){
			in1[i] = parseLongs(br.readLine().split(" "));
		}
		for(int i=0; i<in[1]; i++){
			in2[i] = parseLongs(br.readLine().split(" "));
		}
		for(int n=0; n<in[0]; n++){
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		}
		println(in3);
	}

	static int[] parseInts(String[] s){
		int[] x = new int[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Integer.parseInt(s[i]);
		}
		return x;
	}

	static int sum(int[] x){
		int t = 0;
		for(int a : x){
			t += a;
		}
		return t;
	}

	static void println(long[][] x){
		for(int n=0; n<x.length; n++){
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		}
	}
	
	static long[] parseLongs(String[] s){
		long[] x = new long[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Long.parseLong(s[i]);
		}
		return x;
	}
	
} import java.io.*; io.* java class Main{
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int in[] = parseInts(br.readLine().split(" "));
		long in1[][] = new long[in[0]][in[1]];
		long in2[][] = new long[in[1]][in[2]];
		long in3[][] = new long[in[0]][in[2]];
		for(int i=0; i<in[0]; i++){
			in1[i] = parseLongs(br.readLine().split(" "));
		}
		for(int i=0; i<in[1]; i++){
			in2[i] = parseLongs(br.readLine().split(" "));
		}
		for(int n=0; n<in[0]; n++){
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		}
		println(in3);
	}

	static int[] parseInts(String[] s){
		int[] x = new int[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Integer.parseInt(s[i]);
		}
		return x;
	}

	static int sum(int[] x){
		int t = 0;
		for(int a : x){
			t += a;
		}
		return t;
	}

	static void println(long[][] x){
		for(int n=0; n<x.length; n++){
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		}
	}
	
	static long[] parseLongs(String[] s){
		long[] x = new long[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Long.parseLong(s[i]);
		}
		return x;
	}
	
} Main public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int in[] = parseInts(br.readLine().split(" "));
		long in1[][] = new long[in[0]][in[1]];
		long in2[][] = new long[in[1]][in[2]];
		long in3[][] = new long[in[0]][in[2]];
		for(int i=0; i<in[0]; i++){
			in1[i] = parseLongs(br.readLine().split(" "));
		}
		for(int i=0; i<in[1]; i++){
			in2[i] = parseLongs(br.readLine().split(" "));
		}
		for(int n=0; n<in[0]; n++){
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		}
		println(in3);
	} main {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int in[] = parseInts(br.readLine().split(" "));
		long in1[][] = new long[in[0]][in[1]];
		long in2[][] = new long[in[1]][in[2]];
		long in3[][] = new long[in[0]][in[2]];
		for(int i=0; i<in[0]; i++){
			in1[i] = parseLongs(br.readLine().split(" "));
		}
		for(int i=0; i<in[1]; i++){
			in2[i] = parseLongs(br.readLine().split(" "));
		}
		for(int n=0; n<in[0]; n++){
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		}
		println(in3);
	} BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) int in[] = parseInts(br.readLine().split(" ")); in parseInts(br.readLine().split(" ")) parseInts br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " long in1[][] = new long[in[0]][in[1]]; in1 new long[in[0]][in[1]] in[0] in 0 in[1] in 1 long in2[][] = new long[in[1]][in[2]]; in2 new long[in[1]][in[2]] in[1] in 1 in[2] in 2 long in3[][] = new long[in[0]][in[2]]; in3 new long[in[0]][in[2]] in[0] in 0 in[2] in 2 for(int i=0; i<in[0]; i++){
			in1[i] = parseLongs(br.readLine().split(" "));
		} int i=0; int i=0; i 0 i<in[0] i in[0] in 0 i++ i++ i {
			in1[i] = parseLongs(br.readLine().split(" "));
		} {
			in1[i] = parseLongs(br.readLine().split(" "));
		} in1[i] = parseLongs(br.readLine().split(" ")) in1[i] in1 i parseLongs(br.readLine().split(" ")) parseLongs br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " for(int i=0; i<in[1]; i++){
			in2[i] = parseLongs(br.readLine().split(" "));
		} int i=0; int i=0; i 0 i<in[1] i in[1] in 1 i++ i++ i {
			in2[i] = parseLongs(br.readLine().split(" "));
		} {
			in2[i] = parseLongs(br.readLine().split(" "));
		} in2[i] = parseLongs(br.readLine().split(" ")) in2[i] in2 i parseLongs(br.readLine().split(" ")) parseLongs br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " for(int n=0; n<in[0]; n++){
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		} int n=0; int n=0; n 0 n<in[0] n in[0] in 0 n++ n++ n {
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		} {
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		} for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			} int l=0; int l=0; l 0 l<in[2] l in[2] in 2 l++ l++ l {
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			} {
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			} for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				} int m=0; int m=0; m 0 m<in[1] m in[1] in 1 m++ m++ m {
					in3[n][l] += in1[n][m] * in2[m][l];
				} {
					in3[n][l] += in1[n][m] * in2[m][l];
				} in3[n][l] += in1[n][m] * in2[m][l] in3[n][l] in3[n] in3 n l in1[n][m] * in2[m][l] in1[n][m] in1[n] in1 n m in2[m][l] in2[m] in2 m l println(in3) println in3 String[] args args static int[] parseInts(String[] s){
		int[] x = new int[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Integer.parseInt(s[i]);
		}
		return x;
	} parseInts {
		int[] x = new int[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Integer.parseInt(s[i]);
		}
		return x;
	} int[] x = new int[s.length]; x new int[s.length] s.length s s.length for(int i=0; i<s.length; i++){
			x[i] = Integer.parseInt(s[i]);
		} int i=0; int i=0; i 0 i<s.length i s.length s s.length i++ i++ i {
			x[i] = Integer.parseInt(s[i]);
		} {
			x[i] = Integer.parseInt(s[i]);
		} x[i] = Integer.parseInt(s[i]) x[i] x i Integer.parseInt(s[i]) Integer.parseInt Integer s[i] s i return x; x String[] s s static int sum(int[] x){
		int t = 0;
		for(int a : x){
			t += a;
		}
		return t;
	} sum {
		int t = 0;
		for(int a : x){
			t += a;
		}
		return t;
	} int t = 0; t 0 for(int a : x){
			t += a;
		} int a x {
			t += a;
		} {
			t += a;
		} t += a t a return t; t int[] x x static void println(long[][] x){
		for(int n=0; n<x.length; n++){
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		}
	} println {
		for(int n=0; n<x.length; n++){
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		}
	} for(int n=0; n<x.length; n++){
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		} int n=0; int n=0; n 0 n<x.length n x.length x x.length n++ n++ n {
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		} {
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		} for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			} int m=0; int m=0; m 0 m<x[0].length m x[0].length x[0] x 0 x[0].length m++ m++ m {
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			} {
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			} if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				} m == x[0].length-1 m x[0].length-1 x[0].length x[0] x 0 x[0].length 1 {
					System.out.println(x[n][m]);
				} System.out.println(x[n][m]) System.out.println System.out System System.out x[n][m] x[n] x n m {
					System.out.print(x[n][m] + " ");
				} System.out.print(x[n][m] + " ") System.out.print System.out System System.out x[n][m] + " " x[n][m] x[n] x n m " " long[][] x x static long[] parseLongs(String[] s){
		long[] x = new long[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Long.parseLong(s[i]);
		}
		return x;
	} parseLongs {
		long[] x = new long[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Long.parseLong(s[i]);
		}
		return x;
	} long[] x = new long[s.length]; x new long[s.length] s.length s s.length for(int i=0; i<s.length; i++){
			x[i] = Long.parseLong(s[i]);
		} int i=0; int i=0; i 0 i<s.length i s.length s s.length i++ i++ i {
			x[i] = Long.parseLong(s[i]);
		} {
			x[i] = Long.parseLong(s[i]);
		} x[i] = Long.parseLong(s[i]) x[i] x i Long.parseLong(s[i]) Long.parseLong Long s[i] s i return x; x String[] s s
import java.io.*;

class Main{
	public static void main(String[] args)throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int in[] = parseInts(br.readLine().split(" "));
		long in1[][] = new long[in[0]][in[1]];
		long in2[][] = new long[in[1]][in[2]];
		long in3[][] = new long[in[0]][in[2]];
		for(int i=0; i<in[0]; i++){
			in1[i] = parseLongs(br.readLine().split(" "));
		}
		for(int i=0; i<in[1]; i++){
			in2[i] = parseLongs(br.readLine().split(" "));
		}
		for(int n=0; n<in[0]; n++){
			for(int l=0; l<in[2]; l++){
				for(int m=0; m<in[1]; m++){
					in3[n][l] += in1[n][m] * in2[m][l];
				}
			}
		}
		println(in3);
	}

	static int[] parseInts(String[] s){
		int[] x = new int[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Integer.parseInt(s[i]);
		}
		return x;
	}

	static int sum(int[] x){
		int t = 0;
		for(int a : x){
			t += a;
		}
		return t;
	}

	static void println(long[][] x){
		for(int n=0; n<x.length; n++){
			for(int m=0; m<x[0].length; m++){
				if(m == x[0].length-1){
					System.out.println(x[n][m]);
				}else{
					System.out.print(x[n][m] + " ");
				}
			}
		}
	}
	
	static long[] parseLongs(String[] s){
		long[] x = new long[s.length];
		for(int i=0; i<s.length; i++){
			x[i] = Long.parseLong(s[i]);
		}
		return x;
	}
	
}