#include #define rep(i,n) for(ll i=0, i##_len=(n); ibool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b> N >> M >> K; vector L(M),R(M); ll MOD = 1000000007; rep(i,M) cin >> L[i] >> R[i]; vector cur(N+2,0); vector next(N+2,0); cur[1] = 1; REP(i,1,K+1){ next.assign(N+2,0); vector add(N+1,0); rep(j,N) add[j+1] = (add[j] + cur[j+1]) % MOD; rep(j,M){ ll left = L[j]; ll right = R[j]; ll sum = (add[right] - add[left-1] + MOD) % MOD; next[left] += sum, next[left] %= MOD; next[right+1] += MOD - sum, next[right+1] %= MOD; } rep(j,N)next[j+1] += next[j], next[j+1] %= MOD; swap(cur, next); } cout << cur[N] << endl; return 0; }