#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;
int efm=qpow(x,y/2)%mod;
if(y%2==0)return efm*efm%mod;
else return efm*efm%mod*x%mod;
}
unordered_map<int,int>mp;
struct node{
int x,y;
}a[1000005];
bool cmp(node a,node b)
{
if(a.x!=b.x)return a.x<b.x;
else return a.y<b.y;
}
int bh[1000005],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;
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&&i!=1)continue;
if(!mp[a[i].x])
bh[++cnt]=a[i].x;
mp[a[i].x]+=a[i].y;
}
for(int i=1;i<=cnt;i++)
{
ans*=(ds-mp[bh[i]])%mod;
ans%=mod;
}
ans*=qpow(ds,m-cnt)%mod;
cout<<ans%mod;
return 0;
}