#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <sstream>
#include <cstring>
#include <cctype>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <ctime>
#include <cassert>
#define _for(i,a,b) for(int i=(a);i<(b);++i)
#define _rep(i,a,b) for(int i=(a);i<=(b);++i)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
inline int read_int(){
int t=0;bool sign=false;char c=getchar();
while(!isdigit(c)){sign|=c=='-';c=getchar();}
while(isdigit(c)){t=(t<<1)+(t<<3)+(c&15);c=getchar();}
return sign?-t:t;
}
inline LL read_LL(){
LL t=0;bool sign=false;char c=getchar();
while(!isdigit(c)){sign|=c=='-';c=getchar();}
while(isdigit(c)){t=(t<<1)+(t<<3)+(c&15);c=getchar();}
return sign?-t:t;
}
inline char get_char(){
char c=getchar();
while(c==' '||c=='\n'||c=='\r')c=getchar();
return c;
}
inline void write(LL x){
register char c[21],len=0;
if(!x)return putchar('0'),void();
if(x<0)x=-x,putchar('-');
while(x)c[++len]=x%10,x/=10;
while(len)putchar(c[len--]+48);
}
inline void space(LL x){write(x),putchar(' ');}
inline void enter(LL x){write(x),putchar('\n');}
const int MAX_size=305,mod=1e9+7;
struct Matrix{
int ele[MAX_size][MAX_size];
};
int Inv(int x,int p){
int ans=1,base=x,k=p-2;
while(k){
if(k&1)
ans=1LL*ans*base%p;
base=1LL*base*base%p;
k>>=1;
}
return ans;
}
int det(Matrix a,int n,int mod){
int ans=1;
_rep(i,2,n){
int pos=i;
_rep(j,i,n)if(a.ele[j][i]){pos=j;break;}
if(!a.ele[pos][i])return 0;
if(pos!=i){_rep(j,i,n) swap(a.ele[i][j],a.ele[pos][j]);ans=mod-ans;}
ans=1LL*ans*a.ele[i][i]%mod;
int k=Inv(a.ele[i][i],mod);
_rep(j,i,n)a.ele[i][j]=1LL*a.ele[i][j]*k%mod;
_rep(j,i+1,n)for(int k=n;k>=i;k--)
a.ele[j][k]=(a.ele[j][k]-1LL*a.ele[j][i]*a.ele[i][k])%mod;
}
return (ans+mod)%mod;
}
int main()
{
int n=read_int(),m=read_int(),t=read_int(),u,v,w;
Matrix x;
mem(x.ele,0);
if(t==0){
while(m--){
u=read_int(),v=read_int(),w=read_int();
if(u==v)continue;
x.ele[u][u]=(x.ele[u][u]+w)%mod,x.ele[v][v]=(x.ele[v][v]+w)%mod;
x.ele[u][v]=(x.ele[u][v]-w)%mod,x.ele[v][u]=(x.ele[v][u]-w)%mod;
}
}
else{
while(m--){
u=read_int(),v=read_int(),w=read_int();
if(u==v)continue;
x.ele[u][v]=(x.ele[u][v]-w)%mod,x.ele[v][v]=(x.ele[v][v]+w)%mod;
}
}
enter(det(x,n,mod));
return 0;
}