#include"bits/stdc++.h" using namespace std; using ll = long long; using ld = long double; using pii = pair; using pll = pair; #define FOR(k,m,n) for(ll (k)=(m);(k)<(n);(k)++) #define REP(i,n) FOR((i),0,(n)) #define WAITING(str) int str;std::cin>>str; #define DEBUGING(str) cout<< #str << " " str<; using mat = vector; mat mul(mat& A, mat& B) { mat C(A.size(), vec(B[0].size())); REP(i, A.size())REP(k, B.size())REP(j, B[0].size()) C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD; return C; } mat pow(mat A, ll n) { mat B(A.size(), vec(A.size())); REP(i, A.size())B[i][i] = 1; while (n > 0) { if (n & 1)B = mul(B, A); A = mul(A, A); n >>= 1; } return B; } int main() { ll N, M, K; cin >> N >> M >> K; vector> way(N + 1, vector(N + 1, 0)); REP(i, M) { ll l, r; cin >> l >> r; l--; r--; FOR(pos, l, r + 1) { way[pos][l]++; way[pos][r + 1]--; } } REP(i, N) REP(j, N)way[i][j + 1] += way[i][j]; vector> dp(K + 1, vector(N, 0)); REP(i, N)dp[0][i] = 1; way = pow(way, K); cout << way[0][N-1] << endl; return 0; }