#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
//自行修改,矩阵的最大值和模值
const int maxn=105;
const int Mod=100009;
struct Matrix {
int m[maxn][maxn];
};
//矩阵乘法(a矩阵n*t b矩阵t*m)
Matrix Mul(Matrix a,Matrix b,int n,int t,int m) {
Matrix res;
memset(res.m,0,sizeof(res.m));
for(int j=0;j<t;j++) {//a的列数,b的行数
for(int i=0;i<n;i++) {//a的行数
if(!a.m[i][j])continue;
for(int k=0;k<m;k++) {//b的列数
if(!b.m[j][k])continue;
res.m[i][k]=(res.m[i][k]+a.m[i][j]*b.m[j][k])%Mod;
}
}
}
return res;
}
//矩阵快速幂(n为阶数)
Matrix fastm(Matrix a,int b,int n) {
Matrix s;
memset(s.m,0,sizeof(s.m));
for(int i=0;i<n;i++)
s.m[i][i]=1;
while(b) {
if(b&1)
s=Mul(s,a,n,n,n);
a=Mul(a,a,n,n,n);
b>>=1;
}
return s;
}
int main() {
ios::sync_with_stdio(false);
Matrix a,b,c,res;
int n,t,m;
cin>>n>>t>>m;
for(int i=0;i<n;i++)
for(int j=0;j<t;j++)
cin>>a.m[i][j];
for(int i=0;i<t;i++)
for(int j=0;j<m;j++)
cin>>b.m[i][j];
c=Mul(a,b,n,t,m);
cout<<endl;
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
cout<<c.m[i][j]<<" ";
}
cout<<endl;
}
res=fastm(c,2,n);
cout<<endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++)
cout<<res.m[i][j]<<" ";
cout<<endl;
}
return 0;
}
/*
3 2 3
1 0
0 1
1 0
1 1 1
0 1 0
res:
1 1 1
0 1 0
1 1 1
*/