#include #include #include #include #include #include #include using namespace std; using ll = long long; template struct ColumnVector { struct SquareMatrix { static SquareMatrix E() { SquareMatrix r; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { r.a[i][j] = i == j; } } return r; } ColumnVector operator*(const ColumnVector &v) const { ColumnVector r; for (int i = 0; i < N; i++) { T t = 0; for (int k = 0; k < N; k++) { t += a[i][k] * v.a[k]; } r.a[i] = t != 0; } return r; } SquareMatrix operator*(const SquareMatrix &x) const { SquareMatrix r; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { T t = 0; for (int k = 0; k < N; k++) { t += a[i][k] * x.a[k][j]; } r.a[i][j] = t != 0; } } return r; } SquareMatrix pow(ll k) const { SquareMatrix r = E(), t = *this; for (; k != 0; k /= 2) { if (k & 1) r = r * t; t = t * t; } return r; } void print() const { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cout << a[i][j].i << " \n"[j == N - 1]; } } } T a[N][N]; }; void print() const { for (int i = 0; i < N; i++) { cout << a[i].i << " \n"[i == N - 1]; } } T a[N]; }; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; ll t; cin >> t; ColumnVector v; for (int i = 0; i < n; i++) { v.a[i] = i == 0; } ColumnVector::SquareMatrix x; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { x.a[i][j] = 0; } } for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; x.a[b][a] = 1; } v = x.pow(t) * v; int r = 0; for (int i = 0; i < n; i++) { r += v.a[i]; } cout << r << endl; return 0; }