#include <bits/stdc++.h>
using namespace std;
int n, m, K, S;
long long ans;
pair<int, int> pts[2010];
long long fac[200010], inv[200010];
long long f[25][2010];
long long power(long long a, long long b) {
  long long ret = 1;
  for (; b; b >>= 1) {
    if (b & 1) ret = ret * a % 1000000007;
    a = a * a % 1000000007;
  }
  return ret;
}
long long calc(long long a, long long b) {
  return fac[a + b] * inv[a] % 1000000007 * inv[b] % 1000000007;
}
int main() {
  int i, j, k;
  long long sum;
  for (i = 1, fac[0] = 1; i <= 200000; i++)
    fac[i] = fac[i - 1] * i % 1000000007;
  for (i = 2, inv[1] = 1; i <= 200000; i++)
    inv[i] = (1000000007 - 1000000007 / i) * inv[1000000007 % i] % 1000000007;
  for (i = 1, inv[0] = 1; i <= 200000; i++)
    inv[i] = inv[i - 1] * inv[i] % 1000000007;
  scanf("%d%d%d%d", &n, &m, &K, &S);
  for (i = 1; i <= K; i++) scanf("%d%d", &pts[i].first, &pts[i].second);
  pts[++K].first = n;
  pts[K].second = m;
  sort(pts + 1, pts + 1 + K);
  for (i = 0; i <= 20; i++)
    for (j = 1; j <= K; j++) {
      f[i][j] =
          (f[i][j] + calc(pts[j].first - 1, pts[j].second - 1)) % 1000000007;
      for (k = 0; k < i; k++)
        f[i][j] = (f[i][j] - f[k][j] + 1000000007) % 1000000007;
      for (k = j + 1; k <= K; k++) {
        if (pts[k].second < pts[j].second) continue;
        f[i][k] = (f[i][k] -
                   f[i][j] *
                       calc(pts[k].first - pts[j].first,
                            pts[k].second - pts[j].second) %
                       1000000007 +
                   1000000007) %
                  1000000007;
      }
    }
  for (i = 0, sum = 0; i <= 20; i++) {
    ans = (ans + (S + (1 << i) - 1) / (1 << i) * f[i][K]) % 1000000007;
    sum = (sum + f[i][K]) % 1000000007;
  }
  ans = (ans + calc(n - 1, m - 1) - sum + 1000000007) % 1000000007;
  printf("%I64d", ans * power(calc(n - 1, m - 1), 1000000007 - 2) % 1000000007);
  return 0;
}
