#include <bits/stdc++.h>
int n, m, k, s, r[2010], c[2010];
long long fac[200010], ifac[200010], f[2010][21];
long long inv(int a, int p) {
  return a == 1 ? 1 : (1 + p * (a - inv(p % a, a))) / a % p;
}
long long dfs(int i, int j) {
  if (f[i][j]) return f[i][j] - 1;
  f[i][j] = fac[n + m - r[i] - c[i]] * ifac[n - r[i]] % 1000000007 *
            ifac[m - c[i]] % 1000000007;
  for (int t = j; t--;) (f[i][j] += 1000000007 - dfs(i, t)) %= 1000000007;
  for (int t = k; t--;)
    if (t != i && r[t] >= r[i] && c[t] >= c[i])
      (f[i][j] += (1000000007 - fac[r[t] + c[t] - r[i] - c[i]]) *
                  ifac[r[t] - r[i]] % 1000000007 * ifac[c[t] - c[i]] %
                  1000000007 * dfs(t, j)) %= 1000000007;
  return f[i][j]++;
}
int main() {
  scanf("%d%d%d%d", &n, &m, &k, &s);
  for (int i = 0; i < k; i++) scanf("%d%d", r + i, c + i);
  r[k] = c[k] = 1;
  for (int i = *fac = 1; i <= n + m; i++) fac[i] = fac[i - 1] * i % 1000000007;
  ifac[n + m] = inv(fac[n + m], 1000000007);
  for (int i = n + m; i--;) ifac[i] = ifac[i + 1] * (i + 1) % 1000000007;
  long long ans = 0;
  s--;
  for (int j = 0; s; j++, s /= 2) (ans += dfs(k, j) * s) %= 1000000007;
  std::cout << (ans * ifac[n + m - 2] % 1000000007 * fac[n - 1] % 1000000007 *
                    fac[m - 1] +
                1) %
                   1000000007;
}
