#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N=52,MOD=1e4;
typedef long long ll;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();}
while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();}
return x*f;
}
int n,m,s,t,k,x,y,fish,f[15];
struct Mat{
int a[N][N];
Mat(){memset(a,0,sizeof(a));}
void ini(){for(int i=1;i<=n;i++) a[i][i]=1;}
}g[15],ans;
inline Mat operator *(Mat A,Mat B){
Mat C;
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++) if(A.a[i][k])
for(int j=1;j<=n;j++) if(B.a[k][j])
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%MOD;
return C;
}
inline Mat operator ^(Mat A,int k){
Mat ans;ans.ini();
for(;k;k>>=1,A=A*A)
if(k&1) ans=ans*A;
return ans;
}
void print(Mat A){
puts("hiMat");
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++) printf("%d ",A.a[i][j]);
puts("");
}
}
int main(){
//freopen("in.txt","r",stdin);
n=read();m=read();s=read()+1;t=read()+1;k=read();
for(int i=1;i<=m;i++){
x=read()+1;y=read()+1;
for(int j=1;j<=12;j++) g[j].a[x][y]=g[j].a[y][x]=1;
}
fish=read();
for(int i=1;i<=fish;i++){
int T=read();
for(int j=1;j<=T;j++) f[j]=read()+1;
for(int j=1;j<=12;j++)
for(int k=1;k<=n;k++) g[j].a[k][f[j%T+1]]=0;
}
g[0].ini();
for(int i=1;i<=12;i++) g[0]=g[0]*g[i];
ans=g[0]^(k/12);
for (int i=1;i<=k%12;i++) ans=ans*g[i];
printf("%d",ans.a[s][t]);
}