#include using namespace std; const int MAX = 20000; int main(){ int N, M; long long T; cin >> N >> M >> T; vector> E(N); for (int i = 0; i < M; i++){ int a, b; cin >> a >> b; E[a].push_back(b); } vector> dp(MAX + 1, vector(N, false)); dp[0][0] = true; vector> p(N); for (int i = 0; i < MAX; i++){ for (int j = 0; j < N; j++){ if (dp[i][j]){ p[j].push_back(i); for (int k : E[j]){ dp[i + 1][k] = true; } } } } int ans = 0; if (T <= MAX){ for (int i = 0; i < N; i++){ if (dp[T][i]){ ans++; } } } else { for (int i = 0; i < N; i++){ string S; for (int j = 0; j <= MAX; j++){ if (dp[j][i]){ S += '1'; } else { S += '0'; } } int d = 1; while (1){ string s1 = S.substr(MAX + 1 - d, d); bool ok = true; for (int i = 2; i <= 100; i++){ string s2 = S.substr(MAX + 1 - d * i, d); if (s1 != s2){ ok = false; break; } } if (ok){ break; } d++; assert(d <= 100); } if (dp[MAX / d * d - d + T % d][i]){ ans++; } } } cout << ans << endl; }