import std.stdio, std.string, std.array, std.conv;

void main() {
    int[] tmp = readln.chomp.split.to!(int[]);
    int n = tmp[0], m = tmp[1], l = tmp[2];
    long[][] a = new long[][](n, m);
    foreach (i; 0 .. n) {
        long[] arow = readln.chomp.split.to!(long[]);
        foreach (j; 0 .. m) {
            a[i][j] = arow[j];
        }
    }
    long[][] b = new long[][](m, l);
    foreach (j; 0 .. m) {
        long[] brow = readln.chomp.split.to!(long[]);
        foreach (k; 0 .. l) {
            b[j][k] = brow[k];
        }
    }
    long[][] c = new long[][](n, l);
    foreach (i; 0 .. n) {
        foreach (k; 0 .. l) {
            foreach (j; 0 .. m) {
                c[i][k] += a[i][j] * b[j][k];
            }
        }
    }
    foreach (i; 0 .. n) {
        foreach (k; 0 .. l) {
            c[i][k].write;
            if (k != l - 1) {
                " ".write;
            } else {
                writeln;
            }
        }
    }
}
