#include <bits/stdc++.h>
using namespace std;
char c;
inline void read(int& a) {
  a = 0;
  do c = getchar();
  while (c < '0' || c > '9');
  while (c <= '9' && c >= '0') a = (a << 3) + (a << 1) + c - '0', c = getchar();
}
int n, m, k, s;
vector<int> Val;
vector<pair<int, int> > Po;
int Path[2001][2001];
int f[2001][205], Sum[2001][205];
const int Mod = int(1e9) + 7;
int fact[300001], rev[300001];
inline int Pow(int a, int b) {
  int res = 1;
  for (; b; a = a * 1ll * a % Mod, b >>= 1)
    if (b & 1) res = res * 1ll * a % Mod;
  return res;
}
int C(int second, int first) {
  return first >= 0 && first <= second
             ? (fact[second] * 1ll * rev[first] % Mod) * 1ll *
                   rev[second - first] % Mod
             : 0;
}
int main() {
  read(n);
  read(m);
  read(k);
  read(s);
  if (n == 1 && m == 1) return printf("%d\n", k ? s + 1 >> 1 : s), 0;
  while (s ^ 1) {
    Val.push_back(s);
    s = s + 1 >> 1;
  }
  bool bg, ed;
  bg = ed = false;
  Val.push_back(1), Val.push_back(1);
  Val.push_back(1);
  fact[0] = 1;
  for (int i = 1; i <= 200010; i++) fact[i] = fact[i - 1] * 1ll * i % Mod;
  Po.push_back(make_pair(1, 1));
  rev[200010] = Pow(fact[200010], Mod - 2);
  for (int i = 200009; ~i; i--) rev[i] = rev[i + 1] * (i + 1ll) % Mod;
  for (int i = 1; i <= k; i++) {
    int j, k;
    read(j), read(k);
    if (j == 1 && k == 1)
      bg = true;
    else if (j == n && k == m)
      ed = true;
    else
      Po.push_back(make_pair(j, k));
  }
  sort(Po.begin(), Po.end());
  int De = Val.size();
  for (int i = 0; i < Po.size(); i++)
    for (int j = 0; j < Po.size(); j++)
      Path[i][j] = C(Po[i].first - Po[j].first + Po[i].second - Po[j].second,
                     Po[i].first - Po[j].first);
  for (int de = 1; de <= Val.size(); de++)
    for (int i = Po.size() - 1; ~i; i--) {
      long long tot = 0;
      for (int j = i + 1; j < Po.size(); j++)
        if (i ^ j) {
          (tot += Path[j][i] * 1ll * f[j][de]) %= Mod;
        }
      tot = (Sum[i][de - 1] + tot) % Mod;
      f[i][de] =
          (C(n - Po[i].first + m - Po[i].second, n - Po[i].first) - tot) % Mod;
      f[i][de] += Mod;
      f[i][de] %= Mod;
      Sum[i][de] = (Sum[i][de - 1] + f[i][de]) % Mod;
    }
  int cnt = -1;
  if (bg) cnt++;
  if (ed) cnt++;
  int All = C(n + m - 2, n - 1), Ans = 0;
  for (int de = 1; de < De - 1; de++) {
    (Ans += f[0][de] * 1ll * Val[de + cnt] % Mod) %= Mod;
    All -= f[0][de];
    All %= Mod;
    All += Mod;
    All %= Mod;
  }
  Ans += All;
  Ans %= Mod;
  Ans += Mod;
  Ans %= Mod;
  Ans = Ans * 1ll * Pow(C(n + m - 2, n - 1), Mod - 2) % Mod;
  cout << Ans << endl;
  return 0;
}
