#include<bits/stdc++.h>
using namespace std;
#define sz(x) int(x.size())
#define pb push_back
#define ff first
#define ss second
typedef long long ll;
typedef pair<int,int> ii;
const int N=2e5+100;
const int mod=1e9+7;
int f[N],inv[N],ans[N];
int binpow(int a,int b){
	int ans=1;
	for(;b;b>>=1,a=(1LL*a*a)%mod)
		if(b&1)ans=(1LL*ans*a)%mod;
	return ans;
}

int cosmic(int u,int v){
	return 1LL*f[u+v]*inv[u]%mod*inv[v]%mod;
}

bool cmp(ii a,ii b){
	return a.ff<=b.ff&&a.ss<=b.ss;
}


int main(){
	f[0]=1;
	for(int i=1;i<200010;i++)
		f[i]=(1LL*f[i-1]*i)%mod;
	for(int i=0;i<200010;i++)
		inv[i]=binpow(f[i],mod-2);
	int h,w,n;cin>>h>>w>>n;h--,w--;
	vector<ii>vec(n);
	for(int i=0;i<n;i++){
		cin>>vec[i].ff>>vec[i].ss;
		vec[i].ff--,vec[i].ss--;
	}
	vec.pb({h,w});
	sort(vec.begin(),vec.end());
	for(int i=0;i<=n;i++){
		ans[i]=cosmic(vec[i].ff,vec[i].ss);
		for(int j=0;j<i;j++)if(cmp(vec[j],vec[i])){
			ans[i]-=1LL*ans[j]*cosmic(vec[i].ff-vec[j].ff,vec[i].ss-vec[j].ss)%mod;
			if(ans[i]<0)ans[i]+=mod;
		}
	}
	cout<<ans[n]<<endl;
	return 0;
}
