#include #include using namespace std; typedef long long LL; const int N = 1300010, MOD = 1000000007; int n, m, d1, d2, fac[N], inv[N], ifac[N]; int C(int x, int y) { if (x < y || y < 0) return 0; return 1LL * fac[x] * ifac[y] % MOD * ifac[x - y] % MOD; } void Init() { fac[0] = ifac[0] = 1; fac[1] = ifac[1] = inv[1] = 1; for (int i = 2; i < N; ++i) { fac[i] = 1LL * fac[i - 1] * i % MOD; inv[i] = 1LL * (MOD - MOD / i) * inv[MOD % i] % MOD; ifac[i] = 1LL * ifac[i - 1] * inv[i] % MOD; } } int main() { Init(); scanf("%d%d%d%d", &n, &m, &d1, &d2); int d = d2 - d1; LL y = m - 1LL * (n - 1) * d1 - 1LL; LL ans = 0LL; for (int i = 0; i < n; ++i) { LL w = y - 1LL * i * (d + 1); if (w < 0) break; int v = 1LL * C(n - 1, i) * C(w + n, n) % MOD; if (i & 1) ans -= v; else ans += v; } printf("%lld\n", (ans % MOD + MOD) % MOD); return 0; }