#include<bits/stdc++.h>
#define LL long long
#define mod 998244353
#define vec vector <LL>
#define mat vector <vec>
using namespace std;
LL fpow(LL a,LL b){
if(!b) return 1;
LL t(fpow(a,b>>1));
if(b&1) return t*t%mod*a%mod;
return t*t%mod;
}
inline mat mul(mat a,mat b,int len){
mat c(len,vec(len,0));
for(int i(0);i<len;++i)
for(int j(0);j<len;++j)
for(int k(0);k<len;++k)
(c[i][j]+=a[i][k]*b[k][j]%mod)%=mod;
return c;
}
int n;LL k,a[16],b[16];
bool vis[2][4];
int cnt,state[220],id[65536];
mat G,ans;
void DFS(int cur,int S){
if(cur>=n*n){
id[state[cnt]=S]=cnt++;
return;
}
DFS(cur+1,S);
int x(cur/n),y(cur%n);
if(a[cur]&&!vis[0][x]&&!vis[1][y]){
vis[0][x]=vis[1][y]=1;
DFS(cur+1,S|(1<<cur));
vis[0][x]=vis[1][y]=0;
}
}
inline int update(int S,int x,int y){
bool flg(0);
for(int i(0);i<n;++i)
if(S&(1<<x*n+i)) S^=(1<<x*n+i),flg=1;
for(int i(0);i<n;++i)
if(S&(1<<i*n+y)) S^=(1<<i*n+y),flg=1;
if(!flg) S|=(1<<x*n+y);
return id[S];
}
int main(){
scanf("%d%lld",&n,&k);
for(int i(0);i<n*n;++i) scanf("%lld",&a[i]);
for(int i(0);i<n*n;++i) scanf("%lld",&b[i]);
DFS(0,0);G.resize(cnt+5,vec(cnt+5,0));
for(int i(0);i<cnt;++i){
int S(state[i]);LL t(0),v(0);
for(int cur(0);cur<n*n;++cur){
t+=a[cur]-(S>>cur&1);
if(S>>cur&1) v=(v+b[cur])%mod;
}
t=fpow(t,mod-2);
for(int cur(0);cur<n*n;++cur)
(G[i][update(S,cur/n,cur%n)]+=t*(a[cur]-(S>>cur&1)))%=mod;
G[i][cnt]=v;
}
G[cnt][cnt]=1;ans=G;
while(k){
if(k&1) ans=mul(ans,G,cnt+1);
G=mul(G,G,cnt+1);k>>=1;
}
printf("%lld\n",ans[0][cnt]);
return 0;
}