#include using namespace std; const long long mod = 1000000007; vector> matmul(vector> a, vector> b) { int s = a.size(); vector> c(s, vector(s)); for (int i = 0; i < s; i++) { for (int j = 0; j < s; j++) { for (int k = 0; k < s; k++) { c.at(i).at(k) += a.at(i).at(j) * b.at(j).at(k); c.at(i).at(k) %= mod; } } } return c; } vector vecmul(vector> a, vector x) { int s = x.size(); vector ans(s); for (int i = 0; i < s; i++) { for (int j = 0; j < s; j++) { ans.at(i) += a.at(i).at(j) * x.at(j); ans.at(i) %= mod; } } return ans; } int main() { long long k, m, n; cin >> k >> m >> n; vector> mat(k * k, vector(k * k)); vector x(k * k); for (int i = 0; i < m; i++) { int p, q, r; cin >> p >> q >> r; p--; q--; r--; mat.at(q * k + r).at(p * k + q) = 1; if (p == 0) { x.at(p * k + q) = 1; } } vector> newmat(k * k, vector(k * k)); for (int i = 0; i < k * k; i++) { newmat.at(i).at(i) = 1; } for (long long i = n - 2; i; i /= 2) { if (i & 1) newmat = matmul(newmat, mat); mat = matmul(mat, mat); } x = vecmul(newmat, x); long long ans = 0; for (int i = 0; i < k; i++) { ans += x.at(i * k); ans %= mod; } cout << ans << endl; }