#include #define rep(i,a,b) for(int i=int(a);i> N >> M >> K; vector L(M),R(M); rep(i,0,M){ cin >> L[i] >> R[i]; L[i]--,R[i]--; } ll dp[K+1][N+1] = {}; dp[0][0] = 1; rep(i,0,K){ vector accum(N+1); rep(j,0,N)accum[j+1] = (accum[j] + dp[i][j]) % MOD; rep(j,0,M){ ll num = (accum[R[j]+1] - accum[L[j]] + MOD) % MOD; dp[i+1][L[j]] = (dp[i+1][L[j]] + num) % MOD; dp[i+1][R[j]+1] = (dp[i+1][R[j]+1] - num + MOD) % MOD; } dp[i+1][0] %= MOD; rep(j,0,N)dp[i+1][j+1] = (dp[i+1][j+1] + dp[i+1][j]) % MOD; } //rep(i,0,N)cout << dp[K][i] << " ";cout << endl; cout << dp[K][N-1] << endl; }