#pragma GCC optimize(2)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=39,M=150;
int n,m,t;
int h[N],e[M<<1],ne[M<<1],idx;
int f[1000002][32];
//f[j,u]表示在j时刻,在节点u的情况数
void add(int a,int b)
{
e[idx]=b;
ne[idx]=h[a];
h[a]=idx++;
}
int main()
{
memset(h,-1,sizeof h);
cin>>n>>m;
for(int i=1; i<=m; i++)
{
int a,b;
cin>>a>>b;
add(a,b),add(b,a);
}
//设置n+1为死亡节点
cin>>t;
for(int i=1; i<=n; i++)
add(i,n+1),add(i,i);
f[0][1]=1;
add(n+1,n+1);
for(int j=0; j<=t; j++)
for(int u=1; u<=n+1; u++)
for(int i=h[u]; i!=-1; i=ne[i])
f[j+1][e[i]]=(f[j+1][e[i]]+f[j][u])%2017;
int ans=0;
for(int i=1; i<=n+1; i++)
ans=(ans+f[t][i])%2017;
cout<<ans<<endl;
return 0;
}