#include using namespace std; const int mod = 1e9 + 7; const int N = 1e6 + 10; long long f[N], g[N]; long long ksm(long long a, long long b) { long long r = 1; while (b) { if (b & 1) r = r * a % mod; a = a * a % mod; b >>= 1; } return r; } void init(int n) { f[0] = 1; for (int i = 1; i <= n; i++) f[i] = f[i - 1] * i % mod; g[n] = ksm(f[n], mod - 2); for (int i = n - 1; i >= 0; i--) g[i] = g[i + 1] * (i + 1) % mod; } long long C(int n, int m) { if (m < 0 || m > n) return 0; return f[n] * g[m] % mod * g[n - m] % mod; } int main() { int n, m, d1, d2; cin >> n >> m >> d1 >> d2; if (d1 > d2) { cout << 0 << endl; return 0; } if (d1 == 0 && d2 >= m) { cout << C(m + n - 1, n) << endl; return 0; } init(m + n); long long ans = 0; int k = (m - n * d1 + d2 - 1) / d2; for (int i = 0; i <= k; i++) { int t = m - n * d1 - i * d2; if (t < 0) break; long long tmp = C(t + n, n); if (i & 1) tmp = mod - tmp; ans = (ans + tmp) % mod; } cout << ans << endl;;; return 0; }