#include <bits/stdc++.h>
#define x first
#define y second
#define cin f
#define cout g
using namespace std;
ifstream f("padure2.in");
ofstream g("padure2.out");
const int kMaxN=2e4+5,Xp=2000003,kMaxH=2e6+5;
int i,j,x[kMaxN],y[kMaxN];
int pow(int a,int p){
int rez=1;
while(p)
{
if(p&1) rez=(1LL*rez*a)%Xp;
a=(1LL*a*a)%Xp;
p>>=1;
}
return rez;
}
int fact[kMaxH],invFact[kMaxH];
int dp[2][kMaxN];
pair <int,int> c[kMaxN];
int howMany(pair<int, int> a, pair<int, int> b)
{
if (a.x <= b.x and a.y <= b.y)
return (1LL*((1LL*fact[b.x-a.x+b.y-a.y]*invFact[b.x-a.x])%Xp)*invFact[b.y-a.y])%Xp;
else
{
if(a.x>=b.x&&a.y>=b.y) return howMany(b,a);
else return 0;
}
}
int howMany(int a, int b, pair<int, int> c){
return howMany(make_pair(a,b),c);
}
int howMany(pair<int,int> a,int c,int d){
return howMany(c,d,a);
}
int howMany(int a,int b,int c,int d){
return howMany(make_pair(a,b),make_pair(c,d));
}
void mod(int &a)
{
if(a<0) a+=Xp;
if(a>=Xp) a-=Xp;
}
int main()
{
ios::sync_with_stdio(false);
int h,w,n;
cin>>h>>w>>n;
for(i=1;i<=n;++i)
cin>>c[i].x>>c[i].y;
sort(c+1,c+n+1);
fact[0]=1;
for(i=1;i<kMaxH;++i)
fact[i]=(1LL*fact[i-1]*i)%Xp;
invFact[kMaxH-1]=pow(fact[kMaxH-1],Xp-2);
for(i=kMaxH-2;i;--i)
invFact[i]=(1LL*invFact[i+1]*(i+1))%Xp;
invFact[0] = 1;
int rez=howMany(1,1,h,w);
for(i=1;i<=n;++i)
dp[0][i]=howMany(1,1,c[i]);
for(i=1;i<=n;++i)
{
rez-=(1LL*dp[0][i]*howMany(c[i],h,w))%Xp;
rez+=(1LL*dp[1][i]*howMany(c[i],h,w))%Xp;
mod(rez);
for(j=i+1;j<=n;++j)
{
int exp=howMany(c[i],c[j]);
if(exp)
{
dp[0][j]+=(1LL*dp[1][i]*exp)%Xp;
dp[1][j]+=(1LL*dp[0][i]*exp)%Xp;
mod(dp[0][j]);
mod(dp[1][j]);
}
}
}
cout<<rez;
return 0;
}