#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int r1, c1, r2, c2;
    if (scanf("%d %d", &r1, &c1) !=2) return 0;
    if (r1 <= 0|| c1 <= 0) {
        printf("Invalid input");
        return 0;
    }
    int *A=
    malloc(sizeof(int) * r1 * c1);
    if (!A) return 0;
    for (int i = 0; i < r1; ++i) {
        for (int j = 0; j < c1; ++j) {
            if (scanf("%d", &A[i*c1 + j]) != 1) {
                free(A);
                return 0;
            }
        }
    }
    if(scanf("%d %d", &r2, &c2) != 2) {
        free(A);
        return 0;
    }
    if(r2 <= 0 || c2 <= 0) {
        printf("Invalid input");
        free(A);
        return 0;
    }
    int *B =
    malloc(sizeof(int) * r2 * c2);
    if (!B) { free(A); return 0; }
    for (int i = 0; i < r2; ++i) {
        for (int j = 0; j < c2; ++j) {
            if (scanf("%d", &B[i*c2 + j]) != 1) {
                free(A);
                free(B);
                return 0;
            }
        }
    }
    if(c1 != r2) {
        printf("Invalid input");
        free(A); free(B);
        return 0;
        }
        int *C = calloc(r1 * c2, sizeof(int));
        sizeof(int));
        if (!C) { free(A);
        free(B); return 0; }
        
        for (int i = 0; i < r1; ++i) {
            for (int j = 0; j < c2; ++j) {
                long sum = 0;
                for (int k = 0; k < c1; ++k) {
                    sum +=
                    (long)A[i*c1 + k] *
                    (long)B[k*c2 + j];
                }
                c[i*c2 + j] = (int)sum;
            }
        }
        for (int i = 0; i < r1; ++i) {
            for (int j = 0; j < c2; ++j) {
                printf("%d",C[i*c2 + j]);
                if (j < c2 - 1)
                printf(" ");
            }
            printf("\n");
        }
        free(A); free(B); free(C);
        return 0;
}