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();
        }

    }
}

}