1 #include <bits/stdc++.h>
2 using namespace std;
3
4 const int maxn=60+5;
5 int n,m,sr,sb,sg,p,ans;
6 int a[maxn],s[maxn];
7 int f[21][21][21];
8 bool vis[maxn];
9 int qpow(int a,int b){
10 int ret=1;
11 for(;b;a=(a*a)%p,b>>=1) if(b&1) ret=(ret*a)%p;
12 return ret;
13 }
14 int get(){
15 int cnt=0; memset(f,0,sizeof f); memset(s,0,sizeof s); memset(vis,false, sizeof vis);
16 for(int i=1;i<=n;i++)if(!vis[i]){ cnt++; for(int j=i;!vis[j];j=a[j]) vis[j]=true, s[cnt]++; }
17 f[0][0][0]=1;
18 for(int i=1;i<=cnt;i++)for(int r=sr;r>=0;r--)for(int b=sb;b>=0;b--)for(int g=sg;g>=0;g--){
19 if(r>=s[i]) f[r][b][g]=(f[r][b][g]+f[r-s[i]][b][g])%p;
20 if(b>=s[i]) f[r][b][g]=(f[r][b][g]+f[r][b-s[i]][g])%p;
21 if(g>=s[i]) f[r][b][g]=(f[r][b][g]+f[r][b][g-s[i]])%p;
22 }
23 return f[sr][sb][sg];
24 }
25 int main(){
26 scanf("%d%d%d%d%d",&sr,&sb,&sg,&m,&p);
27 n=sr+sb+sg;
28 for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++) scanf("%d",&a[j]); ans=(ans+get())%p; }
29 for(int i=1;i<=n;i++) a[i]=i; ans=(ans+get())%p;
30 ans=(ans*qpow(m+1,p-2))%p;
31 printf("%d\n",ans);
32 return 0;
33 }