#include <bits/stdc++.h>
using namespace std;
long long const MIN = -10000000000001;
long long const MAX = 10000000000001;
int const N = 200000;
long long const MOD = 10e8 + 7;
vector<int> numbers(200000, 0);
vector<int> tmp;
vector<vector<int> > graph(N, tmp);
int main() {
  long long a, b, k, t;
  cin >> a >> b >> k >> t;
  vector<long long> dp(300000, 0);
  vector<long long> cur(300000, 0);
  dp[a] = 1;
  long long maxler = (2 * k + 1) * t + max(a, b);
  for (int i = 0; i < t; i++) {
    long long sum = 0;
    for (int j = 0; j < 2 * k + 1; j++) {
      sum = (sum + dp[j]) % MOD;
      cur[j] = sum;
    }
    for (int j = 2 * k + 1; j < maxler; j++) {
      if (sum + dp[j] - dp[j - 2 * k - 1] < 0)
        sum = MOD + (sum + dp[j] - dp[j - 2 * k - 1]);
      else
        sum = (sum + dp[j] - dp[j - 2 * k - 1]) % MOD;
      cur[j] = sum;
    }
    dp = cur;
  }
  vector<long long> dpb(300000, 0);
  dpb[b] = 1;
  for (int i = 0; i < t; i++) {
    long long sum = 0;
    for (int j = 0; j < 2 * k + 1; j++) {
      sum = (sum + dpb[j]) % MOD;
      cur[j] = sum;
    }
    for (int j = 2 * k + 1; j < maxler; j++) {
      if (sum + dpb[j] - dpb[j - 2 * k - 1] < 0)
        sum = MOD + (sum + dpb[j] - dpb[j - 2 * k - 1]);
      else
        sum = (sum + dpb[j] - dpb[j - 2 * k - 1]) % MOD;
      cur[j] = sum;
    }
    dpb = cur;
  }
  long long sum = 0;
  for (int i = 0; i < a; i++) {
    sum = (sum + dpb[i]) % MOD;
  }
  long long count = 0;
  for (int i = a; i < maxler; i++) {
    count = (count + (dp[i] * sum) % MOD) % MOD;
    sum = (sum + dpb[i]) % MOD;
  }
  sum = 0;
  cout << count << endl;
  return 0;
}
