#include<stdio.h>
#include<memory.h>
inline int Rin(){
int x=0,c=getchar(),f=1;
for(;c<48||c>57;c=getchar())
if(!(c^45))f=-1;
for(;c>47&&c<58;c=getchar())
x=(x<<1)+(x<<3)+c-48;
return x*f;
}
bool b[61];
int s[4],n,m,md,fur[61][61],d[61],f[21][21][21],ans;
int dp(int x){
memset(b,0,sizeof(b));
int top=0,v;
for(int i=1;i<=n;i++)
if(!b[i]){
b[i]=1;
d[++top]=1;
v=i;
while(!b[fur[x][v]])
b[fur[x][v]]=1,
d[top]++,
v=fur[x][v];
}
memset(f,0,sizeof(f));
f[0][0][0]=1;
for(int k=1;k<=top;k++)
for(int dx=s[1];dx>=0;dx--)
for(int dy=s[2];dy>=0;dy--)
for(int dz=s[3];dz>=0;dz--)
(dx>=d[k]?(f[dx][dy][dz]=(f[dx][dy][dz]+f[dx-d[k]][dy][dz])%md):0),
(dy>=d[k]?(f[dx][dy][dz]=(f[dx][dy][dz]+f[dx][dy-d[k]][dz])%md):0),
(dz>=d[k]?(f[dx][dy][dz]=(f[dx][dy][dz]+f[dx][dy][dz-d[k]])%md):0);
return f[s[1]][s[2]][s[3]];
}
void exgcd(int a,int b,int &x,int &y){
if(!b){x=1;y=0;return;}
exgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
}
int main(){
for(int i=1;i<=3;i++)
s[i]=Rin(),
n+=s[i];
m=Rin(),md=Rin();
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
fur[i][j]=Rin();
m++;
for(int i=1;i<=n;i++)
fur[m][i]=i;
for(int i=1;i<=m;i++)
ans=(ans+dp(i))%md;
int x,y;
exgcd(m,md,x,y);
while(x<=0)x+=md,y-=m;
printf("%d\n",ans*x%md);
return 0;
}