#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 5, NN = 2e5 + 5;
long long MOD = 1e9 + 7;
int n, m, k, s;
int r[N], c[N];
long long dp[N][25], fac[NN], inv[NN], f[N][N];
pair<int, int> p[N];
long long mul(long long a, long long b) { return (a * b) % MOD; }
long long add(long long a, long long b) { return (a + b) % MOD; }
long long sub(long long a, long long b) {
  b %= MOD;
  return (a + MOD - b) % MOD;
}
long long fastexp(long long a, long long b) {
  if (b == 0) return 1;
  long long x = fastexp(a, b >> 1);
  x = mul(x, x);
  if (b & 1) x = mul(x, a);
  return x;
}
void pre() {
  fac[0] = inv[0] = 1;
  for (int i = 1; i < NN; i++) {
    fac[i] = mul(fac[i - 1], i);
    inv[i] = fastexp(fac[i], MOD - 2);
  }
}
bool cmp(pair<int, int> a, pair<int, int> b) {
  if (a.first != b.first) return (a.first < b.first);
  return (a.second < b.second);
}
void func() {
  for (int i = 0; i <= k; i++) {
    for (int j = i + 1; j <= k; j++) {
      long long x = fac[p[j].second - p[i].second + p[j].first - p[i].first];
      x = mul(x, inv[p[j].second - p[i].second]);
      x = mul(x, inv[p[j].first - p[i].first]);
      f[i][j] = x;
    }
  }
}
int main() {
  pre();
  cin >> n >> m >> k >> s;
  p[0] = make_pair(1, 1);
  for (int i = 1; i <= k; i++) {
    cin >> r[i] >> c[i];
    p[i] = make_pair(r[i], c[i]);
  }
  sort(p + 1, p + k + 1, cmp);
  bool added = 0;
  if (p[k].first != n or p[k].second != m) {
    added = 1;
    p[k + 1] = make_pair(n, m);
    k++;
  }
  func();
  for (int i = 1; i <= k; i++) {
    for (int j = 1; j <= 23; j++) {
      long long x = 0;
      for (int ind = 1; ind < i; ind++) {
        if (p[ind].second <= p[i].second)
          x = add(x, mul(sub(dp[ind][j], dp[ind][j - 1]), f[ind][i]));
      }
      dp[i][j] = sub(f[0][i], x);
    }
    dp[i][24] = f[0][i];
  }
  long long ans = 0, tot = f[0][k];
  if (added) {
    for (int i = 1; i <= 24; i++) {
      long long x = sub(dp[k][i], dp[k][i - 1]);
      ans = add(ans, mul(x, s));
      s = (s + 1) >> 1;
    }
  } else {
    for (int i = 1; i <= 24; i++) {
      long long x = sub(dp[k][i], dp[k][i - 1]);
      s = (s + 1) >> 1;
      ans = add(ans, mul(x, s));
    }
  }
  ans = mul(ans, fastexp(tot, MOD - 2));
  cout << ans << endl;
}
