#include <bits/stdc++.h>
using namespace std;
const int N = 2020, M = 200200, P = 1000000007;
int i, j, k, n, m, nm, K, s, nn, ch, fg1, fg2, x, y, ans;
int a[22], f[N][22], Jc[M], Jc_[M];
struct cc {
  int x, y;
} A[N];
void R(int &x) {
  x = 0;
  ch = getchar();
  while (ch < '0' || '9' < ch) ch = getchar();
  while ('0' <= ch && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
}
int ksm(int x, int y) {
  int z = 1;
  for (; y; y >>= 1, x = (long long)x * x % P)
    if (y & 1) z = (long long)z * x % P;
  return z;
}
void pre(int n) {
  Jc[0] = Jc_[0] = 1;
  for (i = 1; i <= n; i++) Jc[i] = (long long)Jc[i - 1] * i % P;
  Jc_[n] = ksm(Jc[n], P - 2);
  for (i = n - 1; i; i--) Jc_[i] = (long long)Jc_[i + 1] * (i + 1) % P;
}
bool cmp(const cc &a, const cc &b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
int C(int n, int m) {
  if (n < m) return 0;
  return (long long)Jc[n] * Jc_[m] % P * Jc_[n - m] % P;
}
int main() {
  R(n);
  R(m);
  R(K);
  R(s);
  nn = -1;
  while (s > 1) a[++nn] = s, s = (s + 1) >> 1;
  a[++nn] = 1;
  a[++nn] = 1;
  pre(n + m);
  for (i = 1; i <= K; i++) {
    R(x);
    R(y);
    if (x == 1 && y == 1) {
      fg1 = 1;
      continue;
    }
    if (x == n && y == m) {
      fg2 = 1;
      continue;
    }
    A[++nm].x = x;
    A[nm].y = y;
  }
  A[++nm].x = n;
  A[nm].y = m;
  sort(A + 1, A + nm + 1, cmp);
  for (i = 1; i <= nm; i++) {
    for (j = 1; j <= nn; j++) {
      f[i][j] = C(A[i].x + A[i].y - 2, A[i].x - 1);
      for (k = 1; k < i; k++)
        if (A[k].x <= A[i].x && A[k].y <= A[i].y)
          f[i][j] =
              (f[i][j] + P -
               (long long)f[k][j] *
                   C(A[i].x - A[k].x + A[i].y - A[k].y, A[i].x - A[k].x) % P) %
              P;
    }
    for (j = nn; j; j--) f[i][j] = (f[i][j] + P - f[i][j - 1]) % P;
    if (i < nm)
      ans =
          ((long long)f[i][nn] * C(n - A[i].x + m - A[i].y, n - A[i].x) + ans) %
          P;
  }
  for (j = 1; j <= nn; j++) {
    k = j;
    if (fg1) k++;
    if (!fg2) k--;
    if (k > nn) k = nn;
    ans = ((long long)a[k] * f[nm][j] + ans) % P;
  }
  ans = (long long)ans * ksm(C(n + m - 2, n - 1), P - 2) % P;
  printf("%d\n", ans);
}
