#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Mod=1e9+7;
const int MAX_N=200005;
int F[MAX_N];
int bin_pow(int a,int b)
{
	int ret=1;
	while(b>0)
	{
		if(b%2)ret=ret*a%Mod;
		a=a*a%Mod;
		b/=2;
	}
	return ret;
}
int inverse(int x)
{
	return bin_pow(x,Mod-2);
}
int C(int n,int m)
{
	return F[n]*inverse(F[m])%Mod*inverse(F[n-m])%Mod;
}
int calc(int x1,int y1,int x2,int y2)
{
	return C(x2-x1+y2-y1,x2-x1);
}
int x[MAX_N],y[MAX_N];
int dp[MAX_N];
int H,W,n;
void init()
{
	F[0]=1;
	for(int i=1;i<MAX_N;i++)F[i]=F[i-1]*i%Mod;
}
signed main()
{
	init();
	cin>>H>>W>>n;
	for(int i=0;i<n;i++)
	{
		cin>>x[i]>>y[i];
	}
	x[n]=H;
	y[n]=W;
	for(int i=0;i<=n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(x[j]>x[j+1] || x[j]==x[j+1] && y[j]>y[j+1])
			{
				swap(x[j],x[j+1]);
				swap(y[j],y[j+1]);
			}
		}
	}
	for(int i=0;i<=n;i++)
	{
		dp[i]=calc(1,1,x[i],y[i]);
		for(int j=0;j<i;j++)
		{
			if(x[j]<=x[i] && y[j]<=y[i])
			{
				dp[i]-=dp[j]*calc(x[j],y[j],x[i],y[i])%Mod;
				dp[i]=(dp[i]+Mod)%Mod;
			}
		}
	}
	cout<<dp[n]<<endl;
	return 0;
}