#include <bits/stdc++.h>
using namespace std;
long long int PuntA[2][1001000];
long long int PuntB[2][1001000];
long long int sumaA[2][1001000];
long long int sumaB[2][1001000];
long long int MOD = (long long int)(1e9 + 7);
int main() {
  int a, b, k, t;
  cin >> a >> b >> k >> t;
  PuntA[0][a + k * t] = 1;
  PuntB[0][b + k * t] = 1;
  sumaA[0][a] = 0;
  for (int p = (a + 1); p < (a + 2 * k * t + 1); p++)
    sumaA[0][p] = (sumaA[0][p - 1] + PuntA[0][p]) % MOD;
  for (int i = 1; i <= t; i++) {
    int ant, cur;
    if (i % 2 == 0) {
      ant = 1;
      cur = 0;
    } else {
      ant = 0;
      cur = 1;
    }
    for (int p = (a); p < (a + 2 * k * t + 1); p++) {
      PuntA[cur][p] = (sumaA[ant][min(p + k, a + 2 * k * t)] -
                       sumaA[ant][max(p - k - 1, a - 1)]) %
                      MOD;
      if (PuntA[cur][p] < 0) PuntA[cur][p] += MOD;
      sumaA[cur][p] = (sumaA[cur][p - 1] + PuntA[cur][p]) % MOD;
    }
  }
  sumaB[0][b] = 0;
  for (int p = (b + 1); p < (b + 2 * k * t + 1); p++)
    sumaB[0][p] = (sumaB[0][p - 1] + PuntB[0][p]) % MOD;
  for (int i = 1; i <= t; i++) {
    int ant, cur;
    if (i % 2 == 0) {
      ant = 1;
      cur = 0;
    } else {
      ant = 0;
      cur = 1;
    }
    for (int p = (b); p < (b + 2 * k * t + 1); p++) {
      PuntB[cur][p] = (sumaB[ant][min(p + k, b + 2 * k * t)] -
                       sumaB[ant][max(p - k - 1, b - 1)]) %
                      MOD;
      if (PuntB[cur][p] < 0) PuntB[cur][p] += MOD;
      sumaB[cur][p] = (sumaB[cur][p - 1] + PuntB[cur][p]) % MOD;
    }
  }
  long long int ans = 0;
  long long int sumB = 0;
  int p1 = a;
  int p2 = b;
  while (p1 <= a + 2 * k * t) {
    while (p2 < p1) {
      sumB = (sumB + PuntB[t & 1][p2]) % MOD;
      p2++;
    }
    ans = (ans + sumB * PuntA[t & 1][p1]) % MOD;
    p1++;
  }
  cout << ans << endl;
  return 0;
}
