#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 10;
const int MN = 2e5 + 10, MK = 2e3 + 10, MOD = 1e9 + 7;
int C[MK][MK], fact[MN], dp[25][MK];
bool fl;
int n, m, k, s, x[MK], y[MK], my[25];
int bpw(int a, int b) {
  if (!b) return 1;
  int t = bpw(a, b / 2);
  t = 1ll * t * t % MOD;
  if (b & 1) return 1ll * a * t % MOD;
  return t;
}
int Comb(int a, int b) {
  if (a < b) return 0;
  return 1ll * fact[a] * bpw(1ll * fact[b] * fact[a - b] % MOD, MOD - 2) % MOD;
}
void prep() {
  fact[0] = 1;
  for (int i = 1; i < MN; ++i) fact[i] = 1ll * i * fact[i - 1] % MOD;
  for (int i = 0; i < k; ++i)
    for (int j = 0; j < k; ++j) {
      if (i != j && x[i] <= x[j] && y[i] <= y[j])
        C[i][j] = Comb(x[j] - x[i] + y[j] - y[i], x[j] - x[i]);
    }
  int cur = s;
  for (int i = 0; i < 25; ++i) {
    my[i] = cur;
    cur = (cur + 1) / 2;
  }
  for (int rp = 0; rp < 25; ++rp)
    for (int i = 0; i < k; ++i) {
      dp[rp][i] = Comb(x[i] + y[i], x[i]);
      for (int j = 0; j < k; ++j)
        if (i != j && x[j] <= x[i] && y[j] <= y[i])
          dp[rp][i] =
              (1ll * dp[rp][i] - 1ll * dp[rp][j] * C[j][i] % MOD + MOD) % MOD;
      for (int j = 0; j < rp; ++j)
        dp[rp][i] = (1ll * dp[rp][i] - dp[j][i] + MOD) % MOD;
    }
}
void solve() {
  long long ans = 0, tmp = 0;
  for (int i = 0; i < 24; ++i) {
    ans = (1ll * dp[i][k - 1] * my[i + fl] % MOD + 1ll * ans) % MOD;
    tmp = (1ll * tmp + dp[i][k - 1]) % MOD;
  }
  ans = (1ll * ans + 1ll * Comb(n + m - 2, n - 1) - tmp + MOD) % MOD;
  cout << 1ll * ans * bpw(Comb(n + m - 2, n - 1), MOD - 2) % MOD << endl;
}
pair<int, int> tmp[MK];
int main() {
  ios_base ::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m >> k >> s;
  int ind = -1;
  int sz = 0;
  for (int i = 0; i < k; ++i) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    if (a > n - 1 || b > m - 1) continue;
    tmp[sz++] = make_pair(a, b);
  }
  sort(tmp, tmp + sz);
  k = sz;
  for (int i = 0; i < k; ++i) {
    x[i] = tmp[i].first, y[i] = tmp[i].second;
    if (x[i] == n - 1 && y[i] == m - 1) fl = true, ind = i;
  }
  if (~ind)
    swap(y[ind], y[k - 1]), swap(x[ind], x[k - 1]);
  else
    x[k++] = n - 1, y[k - 1] = m - 1;
  prep();
  solve();
  return 0;
}
