#include #define to edge[i].v #define mp make_pair #define rint register int #define fgx cerr<<"-------------"< pii; void dbg(){cerr<void dbg(A x,B... y){cerr<>=1,x=(ll)x*x%mod)if(y&1)A=(ll)A*x%mod;return A;} int main() { int t; cin>>t; while(t--) { int m,k,x,y,z; mat _[2],A,B; scanf("%d%d%d",&n,&m,&k); for(rint i=1;i<=n;i++) d[i]=0; for(rint i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); _[z].a[x][y]=_[z].a[y][x]=1; d[x]++,d[y]++; } for(rint i=1;i<=n;i++) for(rint j=1;j<=n;j++) _[0].a[i][j]=(ll)_[0].a[i][j]*qpow(d[j],mod-2)%mod,_[1].a[i][j]=(ll)_[1].a[i][j]*qpow(d[j],mod-2)%mod; // pr(_[1]); for(rint i=1;i<=n;i++) for(rint j=1;j<=n;j++) A.a[i][j]=_[0].a[i][j],A.a[i+n][j]=_[1].a[i][j],A.a[i][j+n]=_[1].a[i][j],A.a[i+n][j+n]=_[0].a[i][j]; for(rint i=1;i<=n+n;i++) B.a[i][i]=1; for(;k;k>>=1,A=A*A) if(k&1) B=B*A; // debug(B.a[3+n][1],B.a[4+n][1],qpow(3,mod-2)); cout<