#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; const ll MOD=1e9+7; ll powmod(ll a, ll k){ ll ap=a, ans=1; while(k){ if(k&1){ ans*=ap; ans%=MOD; } ap=ap*ap; ap%=MOD; k>>=1; } return ans; } ll inv(ll a){ return powmod(a, MOD-2); } ll f[1000001], invf[1000001]; void fac(int n){ f[0]=1; for(ll i=1; i<=n; i++) f[i]=f[i-1]*i%MOD; invf[n]=inv(f[n]); for(ll i=n-1; i>=0; i--) invf[i]=invf[i+1]*(i+1)%MOD; } ll comb(int x, int y){ if(x>n>>m>>k; ll dp[3001][3001]={}; ll s[3001]; dp[0][1]=1; fill(s+1, s+n+1, 1); s[0]=0; vector r[3001], l[3001]; for(int i=0; i>l1>>r1; r[l1].push_back(r1); l[r1].push_back(l1); } for(int i=1; i<=k; i++){ ll sum=0; for(int j=1; j<=n; j++){ for(auto r1:r[j]){ sum+=(s[r1]-s[j-1]+MOD); sum%=MOD; } dp[i][j]=sum; for(auto l1:l[j]){ sum+=(s[l1-1]-s[j]+MOD); sum%=MOD; } } s[0]=0; for(int j=1; j<=n; j++){ s[j]=(s[j-1]+dp[i][j])%MOD; } } cout<