# include <bits/stdc++.h>

using namespace std;

const int N = 4e5 + 5;
const int mod = 1e9 + 7;

long long f[N], fc[N], dp[N], ans;
int h, w, n;
pair <int, int> a[N];

int bp(int a, int n){
    long long ret = 1;
    while(n){
        if(n & 1){
            ret = (ret * a) % mod;
        }
        a = (a * 1ll * a) % mod;
        n >>= 1;
    }
    return ret;
}

int cnk(int n, int m){
    return (((f[n + m - 2] * fc[n - 1]) % mod) * fc[m - 1]) % mod;
}

int main(){
    f[0] = fc[0] = 1;

    for(int i = 1; i < N; i ++){
        f[i] = (f[i - 1] * i) % mod;
        fc[i] = bp(f[i], mod - 2);
    }

    cin >> h >> w >> n;

    ans = cnk(h, w);

    for(int i = 1; i <= n; i ++){
        cin >> a[i].first >> a[i].second;
    }

    sort(a + 1, a + n + 1);

    for(int i = 1; i <= n; i ++){
        dp[i] = cnk(a[i].first, a[i].second);
        for(int j = 1; j <= n; j ++){
            if(i == j)
                continue;
            if(a[j].first <= a[i].first && a[j].second <= a[i].second){
                dp[i] -= (dp[j] * cnk(a[i].first - a[j].first + 1, a[i].second - a[j].second + 1)) % mod;
                dp[i] = (dp[i] + mod) % mod;
            }
        }
        long long ret = (dp[i] * cnk(h - a[i].first + 1, w - a[i].second + 1)) % mod;
        ans = (ans - ret + mod) % mod;
    }

    cout << ans << endl;
}
