#include<iostream>
#include<bits/stdc++.h>
using namespace std;
// #Arrays
vector< vector<int> > vec_mul(vector< vector<int> > A, vector< vector<int> > B){
int m=A.size();
int n=A[0].size();
int o=B.size();
int p=B[0].size();
vector< vector<int> > C(m) ; // order of new matrix m*p
for(int i=0;i<m;i++){
C[i].resize(p);
}
for(int i=0;i<m;i++){
for(int j=0;j<p;j++){
int x=0;
for(int k=0;k<n;k++){
x+=A[i][k]*B[k][j];
}
C[i][j]=x;
}
}
return C;
}
int main(){
int m,n;
cin>>m>>n; // order of first matrix
vector< vector<int> > A(m) ;
for(int i=0;i<m;i++){
A[i].resize(n);
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>A[i][j];
}
}
int o,p;
cin>>o>>p; // order of second matrix
vector< vector<int> > B(o) ;
for(int i=0;i<o;i++){
B[i].resize(p);
}
for(int i=0;i<o;i++){
for(int j=0;j<p;j++){
cin>>B[i][j];
}
}
if(n!=o || m==0 || n==0 || o==0 || p==0){
cout<<"-1"; // multiplication not possible
}else{
vector< vector<int> > C(m) ; // order of new matrix m*p
for(int i=0;i<m;i++){
C[i].resize(p);
}
C=vec_mul(A,B);
for(int i=0;i<m;i++){
for(int j=0;j<p;j++){
cout<<C[i][j]<<" ";
}
cout<<endl;
}
}
cout<<endl;
return 0;
}