#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define ll long long
#define ull unsigned long long
#define pll pair<ll,ll>
#define pb push_back
#define emb emplace_back
#define lg(x) __lg(x)
#define all(s) s.begin(),s.end()
#define name "test"
#define Mask(i) (1LL<<i)
#define testbit(mask, i) ((mask >> i) & 1LL)
#define onBit(mask, i) (mask | (1LL << i))
#define offBit(mask, i) (mask & ~(1LL << i))
#define flipBit(mask, i) (mask ^ (1LL << i))
#define showbit(mask, x) bitset<x>(mask)
const ll mod = 1e9 + 7;

void add(ll &a, ll b){
     if((a += b) >= mod) a -= mod;
}


const ll inf = 1e18;
const ll lim = 1e7 + 5;
const ll N = 500 + 5;

float a[N][N];
float b[N][N];
float c[N][N];
int main()
{
     ios_base::sync_with_stdio(0);
     cout.tie(0);cin.tie(0);
     if(fopen(name".inp","r")){
          freopen(name".inp","r",stdin);
          freopen(name".out","w",stdout);
     }

     int n, m; cin >> n >> m;
     for(int i = 1; i <= n; i++)
          for(int j = 1; j <= m; j++)
               cin >> a[i][j];
     int l, k; cin >> l >> k;
     for(int i = 1; i <= l; i++)
          for(int j = 1; j <= k; j++)
               cin >> b[i][j];

     for(int i = 1; i <= n; i++)
          for(int j = 1; j <= k; j++)
               for(int u = 1; u <= m; u++)
                    c[i][j] = c[i][j] + a[i][u] * b[u][j];

     for(int i = 1; i <= n; i++){
          for(int j = 1; j <= k; j++){
               cout << c[i][j] << " ";
          }cout << '\n';
     }
}











