#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
#define int ll
typedef pair<int,int> pii;
#define rep(i,n) for(ll i=0;i<(ll)(n);i++)
#define all(a)  (a).begin(),(a).end()
#define pb emplace_back
#define INF (1LL<<59)

template<class T>
class matrix{
public:
    vector<vector<T>> elm;
    int height,width;
    
    
    matrix():height(0),width(0){};
    matrix(int h,int w):height(h),width(w){
        elm.resize(h,vector<T>(w,0));	//0-padding
    }
    
    
    matrix<T> operator + (const matrix &m)const{
        matrix<T> ret(this->height,this->width);
        ret.elm = this->elm;
        rep(i,height) rep(j,width) ret.elm[i][j] += m.elm[i][j];
        return ret;
    }
    matrix<T> operator - (const matrix &m)const{
        matrix<T> ret(this->height,this->width);
        ret.elm = this->elm;
        rep(i,height) rep(j,width) ret.elm[i][j] -= m.elm[i][j];
        return ret;
    }
    matrix<T> operator / (const T &number)const{
        matrix<T> ret(this->height,this->width);
        ret.elm = this->elm;
        rep(i,height) rep(j,width) ret.elm[i][j] /= number;
        return ret;
    }
    matrix<T> operator * (const double &number)const{
        matrix<T> ret(this->height,this->width);
        ret.elm = this->elm;
        rep(i,height) rep(j,width) ret.elm[i][j] *= number;
        return ret;
    }
    matrix<T> operator * (const matrix &m)const{
        assert(width==m.height);
        matrix<T> ret(height,m.width);
        rep(i,height){
            rep(j,m.width){
                rep(k,width){
                    ret.elm[i][j] += elm[i][k]*m.elm[k][j];
                }
            }
        }
        return ret;
    }
    
    void output(){
        rep(i,height){
            rep(j,width){
                if(j)cout<<" ";
                cout<<elm[i][j];
            }
            cout<<endl;
        }
    }
    
    matrix<T> tern(){
        matrix<T> ret(width,height);
        rep(i,height) rep(j,width) ret.elm[j][i] = elm[i][j];
        return ret;
    }
    
    matrix<T> inv(){
        assert(height==width);
        int N = height;
        
        matrix<T> mat(height,width*2);
        rep(i,N)rep(j,N)mat.elm[i][j] = this->elm[i][j];
        rep(i,N)mat.elm[i][width+i] = 1;
        
        double div;
        rep(i,N){
            int pivot = i;
            rep(j,N){
                if( abs(mat.elm[pivot][i]) < abs(mat.elm[j][i]) )pivot = j;
            }
            swap( mat.elm[i],mat.elm[pivot] );
            
            div = mat.elm[i][i];
            rep(j,N*2)mat.elm[i][j] /=div;
            rep(ii,N){
                if(i==ii)continue;
                double k = mat.elm[ii][i];
                rep(j,N*2){
                    mat.elm[ii][j]-=k*mat.elm[i][j];
                }
            }
        }
        
        matrix<T> ret(N,N);
        
        rep(i,N)copy(mat.elm[i].begin()+N,mat.elm[i].end(),ret.elm[i].begin());
        rep(i,N)if(mat.elm[i][i]!=1)return matrix<T>(0,0);
        return ret;
    }
};

signed main(){
    int n,m,l;
    cin>>n>>m>>l;
    matrix<int> A(n,m),B(m,l);
    
    rep(i,n){
        rep(j,m){
            cin>>A.elm[i][j];
        }
    }
    
    rep(i,m){
        rep(j,l){
            cin>>B.elm[i][j];
        }
    }
    
    (A*B).output();
}

Measured memory_bytes: 3132