#include<iostream>
using namespace std;
struct node{int p[100][100];};
node a,b;
int num,n,qq;
node cheng(node a,node b)
{
node c;
int j,i,w,k;
for(i=0;i<num;i++)
for(j=0;j<num;j++)
{
int w=0;
//c.p[i][j]=0;
for(k=0;k<num;k++)
w+=(a.p[i][k]*b.p[k][j])%qq;
c.p[i][j]=w%qq;
}
return c;
}
void solve(int m)
{
while(m)
{
if(m%2==1)
b=cheng(a,b);
a=cheng(a,a);
m/=2;
}
}
int main()
{
int i,j,k,m;
while(~scanf("%d",&n))
{
scanf("%d %d",&m,&qq);
num=n*2;
for(i=0;i<num;i++)
for(j=0;j<num;j++)
a.p[i][j]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&a.p[i][j]);
for(i=0;i<n;i++)
a.p[i][i+n]=a.p[i+n][i+n]=1;
for(i=0;i<num;i++)
for(j=0;j<num;j++)
{
if(i==j)
b.p[i][j]=1;
else b.p[i][j]=0;
}
solve(m+1);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
{
b.p[i][j+n]-=1; //若该值取余后为0 再减一 就成负数了 这一细节我一直都没有发现 wa后 测出确实有负数 找了好久的错误 我还以为是程序别的地方有问题 。。直到
if(b.p[i][j+n]<0)// 看了 奖金的博客
b.p[i][j+n]+=qq;
}
if(j==n-1)
printf("%d\n",b.p[i][j+n]);
else
printf("%d ",b.p[i][j+n]);
}
}
}
return 0;
}