#include <bits/stdc++.h>
using namespace std;
vector<vector<int64_t> > dp, partialSum;
int64_t size;
pair<int64_t, int64_t> getRange(int64_t x, int64_t b) {
  if (x > b)
    return make_pair(b + 1, min((int64_t)size - 1, (2 * x - b - 1)));
  else if (x < b)
    return make_pair(max((int64_t)1, 2 * x - b + 1), (b - 1));
  else
    return make_pair(b, b);
}
int64_t getSum(int64_t first, int64_t second) {
  if (second >= first)
    return (partialSum[0][second] - partialSum[0][first - 1] + 1000000007) %
           1000000007;
  else
    return (0);
}
int main() {
  ios ::sync_with_stdio(false);
  int64_t n, a, b, k;
  cin >> n >> a >> b >> k;
  size = n + 1;
  dp = vector<vector<int64_t> >(2, vector<int64_t>(n + 1, 0));
  partialSum = vector<vector<int64_t> >(2, vector<int64_t>(n + 1, 0));
  for (int i = 1; i <= n; i++) {
    dp[0][i] = 1;
    partialSum[0][i] += (partialSum[0][i - 1] + dp[0][i]);
  }
  for (int j = 1; j <= k; j++) {
    for (int i = 0; i < ((int)(partialSum[1]).size()); i++) {
      partialSum[1][i] = 0;
      dp[1][i] = 0;
    }
    for (int i = 1; i <= n; i++) {
      pair<int64_t, int64_t> range = getRange(i, b);
      int64_t value = getSum(range.first, range.second) % 1000000007;
      dp[1][i] = ((value % 1000000007) + (1000000007 - dp[0][i]) % 1000000007) %
                 1000000007;
      partialSum[1][i] = (partialSum[1][i - 1] + partialSum[1][i]) % 1000000007;
      partialSum[1][i] = (partialSum[1][i] + dp[1][i]) % 1000000007;
    }
    for (int i = 0; i <= n; i++) {
      partialSum[0][i] = partialSum[1][i];
      dp[0][i] = dp[1][i];
    }
  }
  cout << dp[0][a] << "\n";
  return (0);
}
