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

//?????????????????????MaxValueException
class MaxValueException extends Exception{

}

//???????????????
class Matrix{



	public int[][] arrayA;
	public int[][] arrayB;
	public long[][] arrayC;


	public Matrix() { }

	// ????????????
	public void CreateArray(String str) throws MaxValueException{

		String[] strArray = str.split(" ");
		int a = Integer.parseInt(strArray[0]);				//??????A????????°rowA
		int b = Integer.parseInt(strArray[1]);				//??????A????????°??¨??????B????????°colA
		int c = Integer.parseInt(strArray[2]);				//??????B????????°colB

		if((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)) {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		}
		else {
			throw new MaxValueException();
		}
	}

	// ?????????????¨????
	public void SetValue(int i, int j, String value, boolean chk) throws MaxValueException{

		int num = Integer.parseInt(value);
		if(0 <= num && num <= 10000) {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		}else {
			throw new MaxValueException();
		}
	}

	// ?¨????
	public void SetMatrix() throws MaxValueException{
		//??????A??¨??????B?????????????´?????????????C
		
		for(int i=0; i< this.arrayA.length; i++) {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		}
	}

	// ??¨???
	public void Show()
	{
		for(int i=0; i<this.arrayC.length;i++) {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		}
	}
}

class Main {
	public static void main(String[] args)throws IOException{
		BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in));

		//matrix????????????C???????????§???????????????
		Matrix c = new Matrix();

		//????????????setmatrix?????????A??¨??????B???????????¨??°????????\?????¶?´??????????
		try {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		}
		catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		}

		//????????????
		c.Show();
	}

} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io class MaxValueException extends Exception{

} MaxValueException Exception class Matrix{



	public int[][] arrayA;
	public int[][] arrayB;
	public long[][] arrayC;


	public Matrix() { }

	// ????????????
	public void CreateArray(String str) throws MaxValueException{

		String[] strArray = str.split(" ");
		int a = Integer.parseInt(strArray[0]);				//??????A????????°rowA
		int b = Integer.parseInt(strArray[1]);				//??????A????????°??¨??????B????????°colA
		int c = Integer.parseInt(strArray[2]);				//??????B????????°colB

		if((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)) {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		}
		else {
			throw new MaxValueException();
		}
	}

	// ?????????????¨????
	public void SetValue(int i, int j, String value, boolean chk) throws MaxValueException{

		int num = Integer.parseInt(value);
		if(0 <= num && num <= 10000) {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		}else {
			throw new MaxValueException();
		}
	}

	// ?¨????
	public void SetMatrix() throws MaxValueException{
		//??????A??¨??????B?????????????´?????????????C
		
		for(int i=0; i< this.arrayA.length; i++) {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		}
	}

	// ??¨???
	public void Show()
	{
		for(int i=0; i<this.arrayC.length;i++) {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		}
	}
} Matrix public int[][] arrayA; arrayA public int[][] arrayB; arrayB public long[][] arrayC; arrayC public Matrix() { } Matrix { } // ????????????
	public void CreateArray(String str) throws MaxValueException{

		String[] strArray = str.split(" ");
		int a = Integer.parseInt(strArray[0]);				//??????A????????°rowA
		int b = Integer.parseInt(strArray[1]);				//??????A????????°??¨??????B????????°colA
		int c = Integer.parseInt(strArray[2]);				//??????B????????°colB

		if((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)) {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		}
		else {
			throw new MaxValueException();
		}
	} CreateArray {

		String[] strArray = str.split(" ");
		int a = Integer.parseInt(strArray[0]);				//??????A????????°rowA
		int b = Integer.parseInt(strArray[1]);				//??????A????????°??¨??????B????????°colA
		int c = Integer.parseInt(strArray[2]);				//??????B????????°colB

		if((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)) {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		}
		else {
			throw new MaxValueException();
		}
	} String[] strArray = str.split(" "); strArray str.split(" ") str.split str " " int a = Integer.parseInt(strArray[0]); a Integer.parseInt(strArray[0]) Integer.parseInt Integer strArray[0] strArray 0 int b = Integer.parseInt(strArray[1]); b Integer.parseInt(strArray[1]) Integer.parseInt Integer strArray[1] strArray 1 int c = Integer.parseInt(strArray[2]); c Integer.parseInt(strArray[2]) Integer.parseInt Integer strArray[2] strArray 2 if((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)) {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		}
		else {
			throw new MaxValueException();
		} (1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100) (1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100) (1 <= a && a <= 100) 1 <= a 1 a a <= 100 a 100 (1 <= b && b <= 100) 1 <= b 1 b b <= 100 b 100 (1 <= c && c <= 100) 1 <= c 1 c c <= 100 c 100 {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		} this.arrayA = new int[a][b] this.arrayA this this.arrayA new int[a][b] a b this.arrayB = new int[b][c] this.arrayB this this.arrayB new int[b][c] b c this.arrayC = new long[a][c] this.arrayC this this.arrayC new long[a][c] a c {
			throw new MaxValueException();
		} throw new MaxValueException(); new MaxValueException() String str str // ?????????????¨????
	public void SetValue(int i, int j, String value, boolean chk) throws MaxValueException{

		int num = Integer.parseInt(value);
		if(0 <= num && num <= 10000) {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		}else {
			throw new MaxValueException();
		}
	} SetValue {

		int num = Integer.parseInt(value);
		if(0 <= num && num <= 10000) {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		}else {
			throw new MaxValueException();
		}
	} int num = Integer.parseInt(value); num Integer.parseInt(value) Integer.parseInt Integer value if(0 <= num && num <= 10000) {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		}else {
			throw new MaxValueException();
		} 0 <= num && num <= 10000 0 <= num 0 num num <= 10000 num 10000 {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		} if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			} chk {
				this.arrayA[i][j] = num;
			} this.arrayA[i][j] = num this.arrayA[i][j] this.arrayA[i] this.arrayA this this.arrayA i j num {
				this.arrayB[i][j] = num;
			} this.arrayB[i][j] = num this.arrayB[i][j] this.arrayB[i] this.arrayB this this.arrayB i j num {
			throw new MaxValueException();
		} throw new MaxValueException(); new MaxValueException() int i i int j j String value value boolean chk chk // ?¨????
	public void SetMatrix() throws MaxValueException{
		//??????A??¨??????B?????????????´?????????????C
		
		for(int i=0; i< this.arrayA.length; i++) {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		}
	} SetMatrix {
		//??????A??¨??????B?????????????´?????????????C
		
		for(int i=0; i< this.arrayA.length; i++) {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		}
	} for(int i=0; i< this.arrayA.length; i++) {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		} int i=0; int i=0; i 0 i< this.arrayA.length i this.arrayA.length this.arrayA this this.arrayA this.arrayA.length i++ i++ i {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		} {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		} for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			} int j=0; int j=0; j 0 j<this.arrayA[i].length j this.arrayA[i].length this.arrayA[i] this.arrayA this this.arrayA i this.arrayA[i].length j++ j++ j {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			} {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			} for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				} int k=0; int k=0; k 0 k<this.arrayB[j].length k this.arrayB[j].length this.arrayB[j] this.arrayB this this.arrayB j this.arrayB[j].length k++ k++ k {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				} {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				} this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k] this.arrayC[i][k] this.arrayC[i] this.arrayC this this.arrayC i k this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k] this.arrayC[i][k] this.arrayC[i] this.arrayC this this.arrayC i k this.arrayA[i][j] * this.arrayB[j][k] this.arrayA[i][j] this.arrayA[i] this.arrayA this this.arrayA i j this.arrayB[j][k] this.arrayB[j] this.arrayB this this.arrayB j k // ??¨???
	public void Show()
	{
		for(int i=0; i<this.arrayC.length;i++) {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		}
	} Show {
		for(int i=0; i<this.arrayC.length;i++) {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		}
	} for(int i=0; i<this.arrayC.length;i++) {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		} int i=0; int i=0; i 0 i<this.arrayC.length i this.arrayC.length this.arrayC this this.arrayC this.arrayC.length i++ i++ i {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		} {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		} for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			} int j=0; int j=0; j 0 j<this.arrayC[i].length j this.arrayC[i].length this.arrayC[i] this.arrayC this this.arrayC i this.arrayC[i].length j++ j++ j {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			} {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			} if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" "); j==(this.arrayC[i].length)-1 j (this.arrayC[i].length)-1 (this.arrayC[i].length) this.arrayC[i] this.arrayC this this.arrayC i this.arrayC[i].length 1 {
				System.out.print(this.arrayC[i][j]);
			} System.out.print(this.arrayC[i][j]) System.out.print System.out System System.out this.arrayC[i][j] this.arrayC[i] this.arrayC this this.arrayC i j System.out.print(this.arrayC[i][j]+" ") System.out.print System.out System System.out this.arrayC[i][j]+" " this.arrayC[i][j] this.arrayC[i] this.arrayC this this.arrayC i j " " System.out.print("\n") System.out.print System.out System System.out "\n" class Main {
	public static void main(String[] args)throws IOException{
		BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in));

		//matrix????????????C???????????§???????????????
		Matrix c = new Matrix();

		//????????????setmatrix?????????A??¨??????B???????????¨??°????????\?????¶?´??????????
		try {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		}
		catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		}

		//????????????
		c.Show();
	}

} Main public static void main(String[] args)throws IOException{
		BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in));

		//matrix????????????C???????????§???????????????
		Matrix c = new Matrix();

		//????????????setmatrix?????????A??¨??????B???????????¨??°????????\?????¶?´??????????
		try {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		}
		catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		}

		//????????????
		c.Show();
	} main {
		BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in));

		//matrix????????????C???????????§???????????????
		Matrix c = new Matrix();

		//????????????setmatrix?????????A??¨??????B???????????¨??°????????\?????¶?´??????????
		try {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		}
		catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		}

		//????????????
		c.Show();
	} BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) Matrix c = new Matrix(); c new Matrix() try {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		}
		catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		} catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		} MaxValueException e {
			System.out.println(e + "???????????????????????????");
		} System.out.println(e + "???????????????????????????") System.out.println System.out System System.out e + "???????????????????????????" e "???????????????????????????" {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		} c.CreateArray(br.readLine()) c.CreateArray c br.readLine() br.readLine br for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			} int i=0; int i=0; i 0 i<c.arrayA.length i c.arrayA.length c.arrayA c c.arrayA c.arrayA.length i++ i++ i {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			} {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			} String[] arrayStrA = br.readLine().split(" "); arrayStrA br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				} int j=0; int j=0; j 0 j<c.arrayA[i].length j c.arrayA[i].length c.arrayA[i] c.arrayA c c.arrayA i c.arrayA[i].length j++ j++ j {
					c.SetValue(i, j, arrayStrA[j], true);
				} {
					c.SetValue(i, j, arrayStrA[j], true);
				} c.SetValue(i, j, arrayStrA[j], true) c.SetValue c i j arrayStrA[j] arrayStrA j true for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			} int i=0; int i=0; i 0 i<c.arrayB.length i c.arrayB.length c.arrayB c c.arrayB c.arrayB.length i++ i++ i {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			} {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			} String[] arrayStrB = br.readLine().split(" "); arrayStrB br.readLine().split(" ") br.readLine().split br.readLine() br.readLine br " " for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				} int j=0; int j=0; j 0 j<c.arrayB[i].length j c.arrayB[i].length c.arrayB[i] c.arrayB c c.arrayB i c.arrayB[i].length j++ j++ j {
					c.SetValue(i, j, arrayStrB[j], false);
				} {
					c.SetValue(i, j, arrayStrB[j], false);
				} c.SetValue(i, j, arrayStrB[j], false) c.SetValue c i j arrayStrB[j] arrayStrB j false c.SetMatrix() c.SetMatrix c c.Show() c.Show c String[] args args
//????????????
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

//?????????????????????MaxValueException
class MaxValueException extends Exception{

}

//???????????????
class Matrix{



	public int[][] arrayA;
	public int[][] arrayB;
	public long[][] arrayC;


	public Matrix() { }

	// ????????????
	public void CreateArray(String str) throws MaxValueException{

		String[] strArray = str.split(" ");
		int a = Integer.parseInt(strArray[0]);				//??????A????????°rowA
		int b = Integer.parseInt(strArray[1]);				//??????A????????°??¨??????B????????°colA
		int c = Integer.parseInt(strArray[2]);				//??????B????????°colB

		if((1 <= a && a <= 100) && (1 <= b && b <= 100) && (1 <= c && c <= 100)) {
			this.arrayA = new int[a][b];
			this.arrayB = new int[b][c];
			this.arrayC = new long[a][c];
		}
		else {
			throw new MaxValueException();
		}
	}

	// ?????????????¨????
	public void SetValue(int i, int j, String value, boolean chk) throws MaxValueException{

		int num = Integer.parseInt(value);
		if(0 <= num && num <= 10000) {
			if(chk) {
				this.arrayA[i][j] = num;
			}else {
				this.arrayB[i][j] = num;
			}

		}else {
			throw new MaxValueException();
		}
	}

	// ?¨????
	public void SetMatrix() throws MaxValueException{
		//??????A??¨??????B?????????????´?????????????C
		
		for(int i=0; i< this.arrayA.length; i++) {
			for(int j=0; j<this.arrayA[i].length; j++) {
				for(int k=0; k<this.arrayB[j].length; k++) {
					this.arrayC[i][k] = this.arrayC[i][k] + this.arrayA[i][j] * this.arrayB[j][k];
				}				
			}
		}
	}

	// ??¨???
	public void Show()
	{
		for(int i=0; i<this.arrayC.length;i++) {
			for(int j=0; j<this.arrayC[i].length;j++) {
			if(j==(this.arrayC[i].length)-1) {
				System.out.print(this.arrayC[i][j]);
			}
			else
				System.out.print(this.arrayC[i][j]+" ");
			}
			System.out.print("\n");
		}
	}
}

class Main {
	public static void main(String[] args)throws IOException{
		BufferedReader br =
				new BufferedReader(new InputStreamReader(System.in));

		//matrix????????????C???????????§???????????????
		Matrix c = new Matrix();

		//????????????setmatrix?????????A??¨??????B???????????¨??°????????\?????¶?´??????????
		try {

			c.CreateArray(br.readLine());


			//??????A???????´?????????? arrayA
			for(int i=0; i<c.arrayA.length;i++) {
				String[] arrayStrA = br.readLine().split(" ");

				for(int j=0; j<c.arrayA[i].length; j++) {
					c.SetValue(i, j, arrayStrA[j], true);
				}
			}

			//??????B???????´??????????arrayB
			for(int i=0; i<c.arrayB.length ;i++) {
				String[] arrayStrB = br.readLine().split(" ");
				for(int j=0; j<c.arrayB[i].length; j++) {
					c.SetValue(i, j, arrayStrB[j], false);
				}
			}

			// ?¨????
			c.SetMatrix();
		}
		catch(MaxValueException e) {
			System.out.println(e + "???????????????????????????");
		}

		//????????????
		c.Show();
	}

}