#include #define rep(i,n)for(long long i=0;i<(long long)(n);++i) #define all(a) a.begin(), a.end() using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair P; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; } const ll MOD=1000000007; const ll INF=1e18; const int MAX=510000; const double pi=acos(-1); int dx[8] = {1,0,-1,0,1,1,-1,-1}; int dy[8] = {0,1,0,-1,-1,1,1,-1}; int n,m,k; ll dp[310][310][310]; int p[310],q[310],c[310]; int main(){ cin.tie(0); ios::sync_with_stdio(false); cin >> n >> m >> k; rep(i,m){ cin >> p[i] >> q[i] >> c[i]; p[i]--; q[i]--; } memset(dp,0,sizeof(dp)); rep(i,300) dp[0][i][0] = 1; rep(i,n){ rep(j,m){ rep(l,k+1){ if(l+c[j]>k)continue; dp[i+1][q[j]][l+c[j]]+=dp[i][p[j]][l]; dp[i+1][q[j]][l+c[j]]%=MOD; } } } ll ans = 0; rep(i,300){ ans += dp[n-1][i][k]; ans%=MOD; } cout << ans << endl; return 0; }