import java.util.Scanner;
public class Main { public static void main(String[] args) {
// 第一行包含一个正整数x,代表第一个矩阵的行数
// 第二行包含一个正整数y,代表第一个矩阵的列数和第二个矩阵的行数
// 第三行包含一个正整数z,代表第二个矩阵的列数
// 之后x行,每行y个整数,代表第一个矩阵的值
// 之后y行,每行z个整数,代表第二个矩阵的值
Scanner scanner = new Scanner(System.in);
int hang1 = scanner.nextInt();
int lie1 = scanner.nextInt();
int hang2 = lie1;
int lie2 = scanner.nextInt();
int[][] juzhen1 = new int[hang1][lie1];
int[][] juzhen2 = new int[hang2][lie2];
while (scanner.hasNext()) {
for (int i = 0; i < hang1; i++) {
for (int j = 0; j < lie1; j++) {
juzhen1[i][j] = scanner.nextInt();
}
}
for (int i = 0; i < hang2; i++) {
for (int j = 0; j < lie2; j++) {
juzhen2[i][j] = scanner.nextInt();
}
}
//遍历矩阵1的行
for (int a = 0; a < hang1; a++) {
//遍历矩阵2的列
for (int c = 0; c < lie2; c++) {
int sum = 0;
//遍历矩阵2的行
for (int b = 0; b < hang2; b++) {
sum += juzhen1[a][b] * juzhen2[b][c];
}
System.out.print(sum + " ");
}
System.out.println();
}
}
}
}