#include<bits/stdc++.h>
#define int long long
#define N 1000000007
using namespace std;
int n, m, k;
struct node{
int s, x;
}xz[100005];
int fpow(int a, int b){
int res = 1;
while(b){
if(b & 1) res = res * a % N;
a = a * a % N;
b >>= 1;
}
return res;
}
bool cmp(node a, node b){
if(a.s != b.s) return a.s < b.s;
return a.x < b.x;
}
signed main(){
cin >> n >> m >> k;
for(int i = 1 ; i <= k ; i++){
cin >> xz[i].s >> xz[i].x;
}
int mul = (long long)(1 + n) * n / 2 % N;
sort(xz + 1, xz + k + 1, cmp);
int cnt = 0, ans = 1, tmp = mul;
for(int i = 1; i <= k ; i++){
if(xz[i].s == xz[i + 1].s && xz[i].x == xz[i + 1].x) continue;
tmp = tmp - xz[i].x;
if(xz[i].s != xz[i + 1].s){
ans = ans * tmp % N;
tmp = mul;
cnt++;
}
}
cout << (ans * fpow(mul, m - cnt)) % N;
return 0;
}