#include <bits/stdc++.h>
using namespace std;
void read(bool out = 0) {}
long long fact[10 * 500009];
long long dp[2009][21];
void init() {
  fact[0] = 1;
  for (int i = 1; i < 10 * 500009; i++)
    fact[i] = i * fact[i - 1], fact[i] %= 1000000007;
}
long long power(long long a, long long b) {
  long long ans = 1;
  while (b) {
    if (b & 1) ans *= a, ans %= 1000000007;
    b /= 2;
    a *= a;
    a %= 1000000007;
  }
  return ans;
}
void fix(long long& x) {
  x %= 1000000007;
  x += 1000000007;
  x %= 1000000007;
}
long long ways(long long x, long long y, long long u, long long v) {
  if (x > u || y > v) return 0;
  long long up = fact[u - x + v - y];
  long long down = fact[u - x] * fact[v - y];
  fix(down);
  down = power(down, 1000000007 - 2);
  up *= down;
  fix(up);
  return up;
}
long long dis[2009][2009];
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  read();
  init();
  long long n, m, k, second;
  cin >> n >> m >> k >> second;
  vector<pair<long long, long long> > v;
  for (int i = 0; i < k; i++) {
    long long x, y;
    cin >> x >> y;
    v.push_back(make_pair(x, y));
  }
  v.push_back(make_pair(1, 1));
  sort(v.begin(), v.end());
  for (int i = 0; i < v.size(); i++)
    for (int j = i + 1; j < v.size(); j++)
      dis[i][j] = ways(v[i].first, v[i].second, v[j].first, v[j].second);
  for (int num = 0; num < 21; num++) {
    for (int i = v.size() - 1; i >= 0; i--) {
      long long x = v[i].first;
      long long y = v[i].second;
      long long total = ways(x, y, n, m);
      for (int j = v.size() - 1; j > i; j--) {
        total -= dis[i][j] * dp[j][num];
        fix(total);
      }
      for (int j = num - 1; j >= 0; j--) {
        total -= dp[i][j];
        fix(total);
      }
      dp[i][num] = total;
    }
  }
  long long P = 0;
  long long Q = ways(1, 1, n, m);
  long long save = 0;
  long long ind = 0;
  long long rst = 0;
  k++;
  while (k--) {
    P += second * (dp[0][ind]);
    fix(P);
    rst += dp[0][ind];
    ind++;
    second = (second + 1) / 2;
  }
  rst = Q - rst;
  fix(rst);
  P += rst;
  fix(P);
  P *= power(Q, 1000000007 - 2);
  fix(P);
  cout << P;
}
