# include <bits/stdc++.h>
# define x first
# define y second
# define ll long long
# define pii pair < int, int > 
using namespace std;
const int N = 2e5 + 100, mod = 1e9 + 7;
ll ways[N], fac[N], inv[N], h, w, n; 
pii a[N];
int C(int n, int m){
    return fac[m] * inv[n] % mod * inv[m - n] % mod;
}
int fun(pii from, pii to){
    int n = to.x - from.x;
    int m = to.y - from.y;
    assert(C(n, n + m) == C(m, n + m));
    return C(n, n + m); 
}
int binary_power(ll value, ll power){
    ll answer = 1;
    while(power){
        if(power & 1){
            answer = answer * value % mod;
        }
        value = value * value % mod;
        power >>= 1; 
    }
    return answer;
}
int inverse(int value, int modulo){
    return binary_power(value, modulo - 2);
}
int main(){
    cin >> h >> w >> n;
    fac[0] = inv[0] = 1;
    for(int i = 1; i <= h + w + 2; i++){
        fac[i] = fac[i - 1] * i % mod;
        inv[i] = inverse(fac[i], mod);
    } 
    for(int i = 0; i < n; i++){
        cin >> a[i].x >> a[i].y; 
    }
    sort(a, a + n);
    a[n] = {h, w};
    for(int i = 0; i <= n; i++){
        ways[i] = fun({1, 1}, a[i]);
        for(int j = 0; j < i; j++){
            if(a[j].x <= a[i].x && a[j].y <= a[i].y){
                ways[i] = (ways[i] - ways[j] * fun(a[j], a[i]) % mod + mod) % mod;
            }
        }
    }
    cout << ways[n] << endl;
}