K,M,N = map(int,input().split()) P = 10 ** 9 + 7 D = K * K edge = [] for _ in range(M): p,q,r = map(int,input().split()) p -= 1 q -= 1 r -= 1 edge.append((p,q,r)) def seki(x,y): l = [[0] * D for _ in range(D)] for i in range(D): for j in range(D): for k in range(D): l[i][j] += x[i][k] * y[k][j] l[i][j] %= P return l R = [[0] * D for _ in range(D)] for p,q,r in edge: nx = q * K + r be = p * K + q R[nx][be] = 1 e = [[0] * D for _ in range(D)] for i in range(D): e[i][i] = 1 N = N - 2 while N: if N & 1: e = seki(e,R) R = seki(R,R) N >>= 1 ans = 0 for i in range(K): be = i for j in range(K): nx = j * K ans += e[nx][be] print(ans % P)