#include #define rep(i, n) for (int i = 0; i < (int)(n); i++) using namespace std; typedef long long ll; int main() { int N, M, K; cin >> N >> M >> K; map>> G; rep(i, M) { int x, y, z; cin >> x >> y >> z; G[x].push_back(make_pair(y, z)); } const int MAX = 305; const int MOD = 1000000007; vector>> dp(N + 1, vector>(MAX, vector(MAX))); for (auto x : G) { for (int i = 0; i < x.second.size(); i++) { dp[1][x.second[i].first][x.second[i].second]++; } } for (int i = 1; i < N; i++) { for (int j = 0; j < MAX; j++) { for (int k = 0; k < MAX; k++) { for (int l = 0; l < G[j].size(); l++) { int nj = G[j][l].first; int ncost = G[j][l].second; if (k + ncost > K) continue; dp[i + 1][nj][k + ncost] += dp[i][j][k]; dp[i + 1][nj][k + ncost] %= MOD; } } } } int ans = 0; for (int x = 0; x < MAX; x++) { ans += dp[N - 1][x][K]; ans %= MOD; } cout << ans << endl; }