#include using namespace std; #define rep(i,n) REP(i,0,n) #define REP(i,s,e) for(int i=(s); i<(int)(e); i++) #define repr(i, n) REPR(i, n, 0) #define REPR(i, s, e) for(int i=(int)(s-1); i>=(int)(e); i--) #define pb push_back #define all(r) r.begin(),r.end() #define rall(r) r.rbegin(),r.rend() #define fi first #define se second typedef long long ll; typedef vector vi; typedef vector vl; typedef pair pii; typedef pair pll; const int INF = 1e9; const ll MOD = 1e9 + 7; double EPS = 1e-8; const int MAX_N = 3010; ll dp[MAX_N][2]; int main(){ int n, m, k; cin >> n >> m >> k; vi L(m), R(m); rep(i, m) { cin >> L[i] >> R[i]; } int cur = 0, nxt = 1; REP(i, 1, MAX_N) dp[i][cur] = 1LL; rep(_, k) { rep(i, MAX_N) dp[i][nxt] = 0LL; rep(i, m) { ll cnt = (dp[R[i]][cur] - dp[L[i]-1][cur] + MOD) % MOD; (dp[L[i]][nxt] += cnt) %= MOD; (dp[R[i]+1][nxt] += MOD-cnt) %= MOD; } REP(i, 1, MAX_N) (dp[i][nxt] += dp[i-1][nxt]) %= MOD; REP(i, 1, MAX_N) (dp[i][nxt] += dp[i-1][nxt]) %= MOD; swap(cur, nxt); // rep(i, n+1) { // cout << " " << dp[i][cur]; // } // cout << endl; } // rep(i, n+1) cout << " " << dp[i][cur]; // cout << endl; cout << (dp[n][cur] - dp[n-1][cur] + MOD) % MOD << endl; return 0; }