#include <bits/stdc++.h>
using namespace std;
template <class BidirIt>
BidirIt prev(BidirIt it,
             typename iterator_traits<BidirIt>::difference_type n = 1) {
  advance(it, -n);
  return it;
}
template <class ForwardIt>
ForwardIt next(ForwardIt it,
               typename iterator_traits<ForwardIt>::difference_type n = 1) {
  advance(it, n);
  return it;
}
const double EPS = 1e-9;
const double PI = 3.141592653589793238462;
template <typename T>
inline T sq(T a) {
  return a * a;
}
const int MOD = 1e9 + 7;
const int MAXK = 2005;
const int MAXD = 2e5 + 5;
inline void add_mod(int &a, int b) {
  a += b;
  if (a >= MOD) a -= MOD;
}
inline void sub_mod(int &a, int b) {
  a -= b;
  if (a < 0) a += MOD;
}
inline int mul_mod(int a, int b) { return a * 1LL * b % MOD; }
int mpow(int a, int b) {
  int res = 1;
  while (b > 0) {
    if (b & 1) res = mul_mod(res, a);
    a = mul_mod(a, a);
    b >>= 1;
  }
  return res;
}
pair<int, int> ar[MAXK];
int dp[MAXK][MAXK];
int fact[MAXD], inv[MAXD];
inline int paths(pair<int, int> a, pair<int, int> b) {
  if (a.first > b.first || a.second > b.second) return 0;
  int x = b.first - a.first;
  int y = b.second - a.second;
  return mul_mod(fact[x + y], mul_mod(inv[x], inv[y]));
}
int main() {
  fact[0] = inv[0] = 1;
  for (int i = 1; i < MAXD; i++) {
    fact[i] = mul_mod(fact[i - 1], i);
    inv[i] = mpow(fact[i], MOD - 2);
  }
  int n, m, k, s;
  scanf("%d %d %d %d", &n, &m, &k, &s);
  for (int i = 0; i < k; i++) scanf("%d %d", &ar[i].first, &ar[i].second);
  sort(ar, ar + k);
  if (ar[k - 1] != make_pair(n, m)) {
    ar[k++] = make_pair(n, m);
    s <<= 1;
  }
  for (int i = 0; i < k; i++) {
    for (int c = 0; c < min(21, k); c++) {
      dp[i][c] = paths(make_pair(1, 1), ar[i]);
      for (int j = 0; j < i; j++)
        sub_mod(dp[i][c], mul_mod(paths(ar[j], ar[i]), dp[j][c]));
      for (int v = 0; v < c; v++) sub_mod(dp[i][c], dp[i][v]);
    }
  }
  int ans = paths(make_pair(1, 1), make_pair(n, m));
  int fin = 0;
  for (int c = 0; c < min(21, k); c++) {
    s -= s / 2;
    sub_mod(ans, dp[k - 1][c]);
    add_mod(fin, mul_mod(dp[k - 1][c], s));
  }
  add_mod(fin, ans);
  printf("%d\n",
         mul_mod(fin, mpow(paths(make_pair(1, 1), make_pair(n, m)), MOD - 2)));
  return 0;
}
