#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, y = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') y = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + (ch ^ 48);
    ch = getchar();
  }
  return x * y;
}
void put(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) put(x / 10);
  putchar((x % 10) + 48);
}
int n, m, s, k, gs;
long long ans, jc[100010 << 1], inv[100010 << 1], f[2010][31];
struct dian {
  int x, y;
  friend bool operator<(const dian &a, const dian &b) {
    return a.x == b.x ? a.y < b.y : a.x < b.x;
  }
} d[100010];
long long ksm(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1ll) res = res * a % 1000000007;
    a = a * a % 1000000007;
    b >>= 1;
  }
  return res;
}
long long C(int n, int m) {
  return jc[n] * inv[m] % 1000000007 * inv[n - m] % 1000000007;
}
long long suan(dian a, dian b) { return C(b.x - a.x + b.y - a.y, b.x - a.x); }
signed main() {
  n = read();
  m = read();
  k = read();
  s = read();
  jc[0] = jc[1] = inv[0] = inv[1] = 1;
  for (int i = 1; i <= n + m; ++i) jc[i] = jc[i - 1] * i % 1000000007;
  inv[n + m] = ksm(jc[n + m], 1000000007 - 2);
  for (int i = n + m - 1; i >= 1; --i)
    inv[i] = inv[i + 1] * (i + 1) % 1000000007;
  for (int i = 1; i <= k; ++i) {
    d[i].x = read();
    d[i].y = read();
  }
  sort(d + 1, d + k + 1);
  if (d[1].x != 1 || d[1].y != 1) {
    d[++k] = (dian){1, 1};
    s *= 2;
  }
  if (d[1].x != n || d[1].y != m)
    d[++k] = (dian){n, m};
  else
    s = (s + 1) / 2;
  gs = log2(s) + 1;
  sort(d + 1, d + 1 + k);
  f[1][0] = 1;
  for (int i = 2; i <= k; ++i) {
    f[i][1] = suan(d[1], d[i]);
    for (int j = 2; j <= gs; ++j) {
      for (int t = 1; t < i; ++t) {
        if (d[t].x <= d[i].x && d[t].y <= d[i].y)
          (f[i][j] += suan(d[t], d[i]) * (f[t][j - 1] - f[t][j])) %= 1000000007;
      }
    }
  }
  for (int i = 1; i <= gs; ++i) {
    s = (s + 1) / 2;
    (ans += (f[k][i] - f[k][i + 1]) * s) %= 1000000007;
  }
  ans = ans * ksm(suan(d[1], d[k]), 1000000007 - 2) % 1000000007;
  cout << (ans % 1000000007 + 1000000007) % 1000000007 << "\n";
  fclose(stdin);
  fclose(stdout);
  return 0;
}
