#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll h,w,n,f[3005],inv[200005],fac[200005],mod=1000000007;
struct point{int x,y;}a[3005];
void pre()
{
	inv[0]=inv[1]=fac[0]=fac[1]=1;
	for(ll i=2;i<=200000;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
	for(ll i=2;i<=200000;i++) inv[i]=inv[i-1]*inv[i]%mod,fac[i]=fac[i-1]*i%mod;
}
bool cmp(point x,point y){return x.x==y.x?x.y<y.y:x.x<y.x;}
ll cmn(ll m,ll n){return fac[m]*inv[m-n]%mod*inv[n]%mod;}
int main()
{
    pre();
    scanf("%lld%lld%lld",&h,&w,&n);
    for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y);
    sort(a+1,a+n+1,cmp);
    a[++n].x=h;a[n].y=w;a[0].x=a[0].y=1;
    f[0]=1;
    for(int i=0;i<n;i++)
    for(int j=i+1;j<=n;j++)
    if(a[i].y<=a[j].y)
    f[j]=(mod+f[j]-f[i]*cmn(a[j].x-a[i].x+a[j].y-a[i].y,a[j].x-a[i].x)%mod)%mod;
    printf("%lld",(mod-f[n])%mod);
    return 0;
}