#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const ll mod=1000000007;

ll fpow(ll b,ll e)
{
    ll res=1;
    while(e)
    {
        if(e&1) res=(res*b)%mod;
        b=(b*b)%mod;
        e/=2;
    }
    return res;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    const int N=200000;
    vector<ll> f(N+1,1);
    for(ll i=1;i<=N;i++) f[i]=(f[i-1]*i)%mod;
    vector<ll> finv(N+1,1);
    finv[N]=fpow(f[N],mod-2);
    for(ll i=N-1;i>=0;i--) finv[i]=(finv[i+1]*(i+1))%mod;
    auto c=[&](int a,int b)->ll
    {
        ll res=f[a];
        res=(res*finv[b])%mod;
        res=(res*finv[a-b])%mod;
        return res;
    };
    auto p=[&](array<int,2> a,array<int,2> b)->ll
    {
        return c(b[0]-a[0]+b[1]-a[1],b[0]-a[0]);
    };
    int n,m,k;
    cin >> n >> m >> k;
    vector<array<int,2>> v(k+1);
    for(int i=0;i<k;i++) cin >> v[i][0] >> v[i][1];
    v[k]={n,m};
    sort(v.begin(),v.end());
    vector<ll> res(k+1,0);
    for(int i=0;i<=k;i++) res[i]=p({1,1},v[i]);
    for(int i=0;i<=k;i++)
    {
        for(int j=i+1;j<=k;j++)
        {
            if(v[j][0]<v[i][0]||v[j][1]<v[i][1]) continue;
            res[j]=(res[j]-res[i]*p(v[i],v[j]))%mod;
            if(res[j]<0) res[j]+=mod;
        }
    }
    cout << res[k] << "\n";
    return 0;
}
