#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 600005, KK = 25;
int fac[N], inv[N], Pre[10][N], P, Num[N];
int dp[KK][KK], dp2[KK][KK], fdp[KK][KK];
vector<pair<int, int>> trp, prms;
int power(int a, int b, int M){
int ans = 1, pr = a;
for (; b; b >>= 1){
if (b & 1)
ans = ans * pr % M;
pr = pr * pr % M;
}
return ans;
}
int main(){
int n, m, K, T, Z, Mod, tot;
cin>>n>>m>>K>>T>>Z, Mod = tot = Z;
trp = {{0, 0}, {n, m}};
for (int i=1, x, y;i<=K;i++)
cin>>x>>y, trp.push_back({x, y});
sort(begin(trp), end(trp));
for (int i=2;i*i<=Z;i++){
int c = 0;
while (Z % i == 0)
c++, Z /= i;
if (c)
prms.push_back({i, c}), P++, tot = (tot / i) * (i-1);
}
if (Z > 1)
prms.push_back({Z, 1}), P++, tot = (tot / Z) * (Z-1);
fac[0] = 1;
for (int i=1;i<N;i++){
Num[i] = i;
for (int j=0;j<P;j++){
Pre[j][i] = Pre[j][i-1];
while (Num[i] % prms[j].first == 0)
Num[i] /= prms[j].first, Pre[j][i]++;
}
fac[i] = fac[i-1] * Num[i] % Mod;
}
inv[N - 1] = power(fac[N - 1], tot - 1, Mod);
for (int i=N-2;i>=0;i--)
inv[i] = inv[i+1] * Num[i+1] % Mod;
for (int i=0;i<K+2;i++){
for (int j=0;j<K+2;j++){
int X = trp[j].first - trp[i].first, Y = trp[j].second - trp[i].second;
if (X < 0 or Y < 0)
continue;
dp[i][j] = fac[X + Y] * inv[X] % Mod * inv[Y] % Mod;
for (int k=0;k<P;k++)
dp[i][j] = dp[i][j] * power(prms[k].first, Pre[k][X + Y] - Pre[k][X] - Pre[k][Y], Mod) % Mod;
}
}
// cout<<"done"<<endl;
for (int i=0;i<K+2;i++){
for (int j=0;j<K+2;j++){
if (!dp[i][j])
continue;
dp2[i][j] = dp[i][j];
for (int l=i+1;l<j;l++){
dp2[i][j] = (dp2[i][j] - dp2[i][l] * dp[l][j]) % Mod;
if (dp2[i][j] < Mod)
dp2[i][j] += Mod;
}
// cout<<i<<" "<<j<<" "<<dp[i][j]<<" "<<dp2[i][j]<<'\n';
}
}
fdp[0][0] = 1;
for (int i=1;i<K+2;i++){
for (int j=0;j<i;j++)
for (int t=0;t<=T;t++)
fdp[i][t+1] = (fdp[i][t+1] + fdp[j][t] * dp2[j][i]) % Mod;
}
int Ans = 0;
for (int t=0;t<=T+1;t++)
Ans = (Ans + fdp[K+1][t]) % Mod;
cout<<Ans<<'\n';
}