fn main() { let v = read_vec::(); let (n, m, k) = (v[0], v[1], v[2]); let mut codes = vec![]; for i in 0..m { let v = read_vec::(); let (p, q, c) = (v[0] - 1, v[1] - 1, v[2]); codes.push((p, q, c)); } let mut dp = vec![vec![0i64; k + 1]; 300]; for i in 0..300 { dp[i][0] = 1; } for _ in 0..n - 1 { let mut next = vec![vec![0i64; k + 1]; 300]; for &(p, q, c) in &codes { for prev_k in 0..k + 1 { if prev_k + c > k { continue; } next[q][prev_k + c] += dp[p][prev_k]; next[q][prev_k + c] %= 1000000007; } } dp = next; } let ans = dp.iter().map(|x| x[k]).fold(0, |s, x| (s + x) % 1000000007); println!("{}", ans); } fn read() -> T { let mut s = String::new(); std::io::stdin().read_line(&mut s).ok(); s.trim().parse().ok().unwrap() } fn read_vec() -> Vec { read::() .split_whitespace() .map(|e| e.parse().ok().unwrap()) .collect() }