#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int N = 5e5;
long long ipow(long long a, long long p) {
  if (p == 0) return 1;
  if (p == 1) return a;
  return ipow(a * a % MOD, p / 2) * ipow(a, p % 2) % MOD;
}
long long fact[N], invfact[N];
long long ext_euclid(long long a, long long b, long long c, long long d) {
  if (c == 0) return b;
  return ext_euclid(c, d, a % c, b - a / c * d);
}
int inverse(long long x) { return ext_euclid(MOD, 0, x, 1) % MOD; }
long long ways(long long n, long long m) {
  if (n < 0 || m < 0 || n < m) return 0;
  long long ans = fact[n] * invfact[m] % MOD * invfact[n - m] % MOD;
  return ans;
}
int main() {
  fact[0] = 1;
  for (int i = 1; i < N; ++i) fact[i] = (fact[i - 1] * i) % MOD;
  invfact[N - 1] = inverse(fact[N - 1]);
  for (int i = N - 2; i >= 0; --i)
    invfact[i] = (invfact[i + 1] * (i + 1)) % MOD;
  int a, k, t, b;
  cin >> a >> b >> k >> t;
  t *= 2;
  a -= b;
  a -= k * t;
  a = -a + 1;
  k += k;
  long long ans = ipow(k + 1, t);
  for (int s = 0; s < a; ++s) {
    long long cur = 0;
    for (int i = 0; i <= t; ++i) {
      int sign = i % 2 == 0 ? 1 : -1;
      cur += sign * ways(t, i) * ways(s + t - 1 - i * (k + 1), t - 1) % MOD;
    }
    ans -= cur;
  }
  ans = (ans % MOD + MOD) % MOD;
  cout << ans << '\n';
}
