#include using namespace std; using ll=long long; using ld=double; #define FOR(i,a,b) for(ll i=a;i<(ll)b;++i) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define aa first #define bb second #define PB push_back #define EQ(a,b) (fabs(a-b)<=(fabs(a+b)*EPS)) #define MOD (1000000007) inline ll d(ll n) { return n >= MOD ? n%MOD : n; } inline ll mpow(ll b, ll ex=MOD-2) { if (b==1) return 1; ll r = 1; while (ex) { if(ex&1)r = (r*b)%MOD; ex >>= 1; b = (b*b)%MOD; } return r; } ll Cmod(ll n, ll k, ll p=MOD) { ll top = 1; ll bottom = 1; for (ll i = n; i > k; -- i) { top *= i; top %= p; } for (ll i = n-k; i > 0; -- i) { bottom *= i; bottom %= p; } return ((top % p) * (mpow(bottom, p-2) % p)) % p; } #define MX (1<<20) ll f[MX] = {1,1}, I[MX]={1,1}, J[MX]={1,1}; void pre(){FOR(k,2,MX)f[k]=f[k-1]*k%MOD,J[k]=-MOD/k*J[MOD%k]%MOD+MOD,I[k]=I[k-1]*J[k]%MOD;;} ll C(int N, int K){return N> a >> b >> k >> c; if (a != c && b != c) { cout << 0 << endl; return 0; } if (a == b && a == c) { cout << k%MOD << endl; return 0; } ll res = 0; for (ll i = 1; i <= k; ++ i) { res += C(k, i) * i; res %= MOD; } cout << res << endl; return 0; }