#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long N = 2e5 + 7;
vector<pair<int, int> > v;
int n, m, k, s;
long long fac[N], ifac[N], g[2222][23], value[23];
long long powermod(long long a, long long n, long long mod) {
  long long ans = 1;
  while (n) {
    if (n & 1) ans = ans * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return ans;
}
long long inv(long long a, long long mod) { return powermod(a, mod - 2, mod); }
long long C(long long n, long long m) {
  return fac[n] * ifac[m] % mod * ifac[n - m] % mod;
}
long long path(int i, int j) {
  return C(v[j].first - v[i].first + v[j].second - v[i].second,
           v[j].first - v[i].first);
}
int main() {
  fac[0] = ifac[0] = 1;
  for (int i = 1; i < N; i++) {
    fac[i] = fac[i - 1] * i % mod;
    ifac[i] = ifac[i - 1] * inv(i, mod) % mod;
  }
  cin >> n >> m >> k >> s;
  for (int i = 0; i < k; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    v.push_back(make_pair(x, y));
  }
  sort(v.begin(), v.end());
  if (v.size() == 0 || v[0] != make_pair(1, 1))
    v.insert(v.begin(), make_pair(1, 1)), s <<= 1;
  if (v[v.size() - 1] != make_pair(n, m))
    v.insert(v.end(), make_pair(n, m)), s <<= 1;
  k = v.size() - 1;
  for (int c = 2; c <= 22; c++) {
    for (int i = k - 1; i >= 0; i--) {
      g[i][c] = path(i, k);
      for (int j = 2; j < c; j++) {
        g[i][c] = (g[i][c] - g[i][j] + mod) % mod;
      }
      for (int j = i + 1; j < k; j++) {
        if (v[j].second < v[i].second) continue;
        g[i][c] = (g[i][c] - g[j][c] * path(i, j) + mod * mod) % mod;
      }
    }
  }
  int cv = 0;
  while (s > 1) {
    value[cv++] = s;
    s -= s >> 1;
  }
  long long ans1 = 0, ans2 = inv(path(0, k), mod), buf = path(0, k);
  for (int i = 2; i < cv; i++) {
    ans1 = (ans1 + g[0][i] * value[i]) % mod;
    buf = (buf - g[0][i] + mod) % mod;
  }
  ans1 = (ans1 + buf) % mod;
  cout << ans1 * ans2 % mod << endl;
  return 0;
}
