#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
int qpow(int x,int y)
{
if(y==0)return 1;
if(y==1)return x%mod;
int efm=qpow(x,y/2)%mod;
if(y%2==0)return efm*efm%mod;
else return efm*efm%mod*x%mod;
}
struct node{
int x,y;
}a[100005];
bool cmp(node aa,node bb)
{
if(aa.x!=bb.x)return aa.x<bb.x;
else return aa.y<bb.y;
}
int bh[100005],cnt,ans=1,ds;
signed main()
{
cin.tie(0)->sync_with_stdio(0);
int n,m,k,cnt=0;
cin>>n>>m>>k;
ds=n*(n+1)/2;ds%=mod;
for(int i=1;i<=k;i++)
cin>>a[i].x>>a[i].y;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=k;i++)
{
if(a[i].x==a[i-1].x&&a[i].y==a[i-1].y)continue;
if(a[i].x!=a[i-1].x)bh[++cnt]=ds;
bh[cnt]=(bh[cnt]-a[i].y+mod)%mod;
}
ans=qpow(ds,m-cnt)%mod;
for(int i=1;i<=cnt;i++)
{
ans=(ans*bh[i])%mod;
ans%=mod;
}
cout<<ans%mod;
return 0;
}