#include <bits/stdc++.h>

using namespace std;

const int N = 2e5 + 5;
const int maxn = 3005;
const int mod = 1e9 + 7;

int h, w, n, fact[N], ifact[N], dp[maxn];
pair <int, int> a[N];

int binPow (int x, int y) {
    int ans = 1;
    while (y > 0) {
        if (y & 1) ans = 1LL * ans * x % mod;
        x = 1LL * x * x % mod;
        y >>= 1;
    }

    return ans;
}

void add (int &x, int y) {
    x += y;
    if (x >= mod) x -= mod;
}

void sub (int &x, int y) {
    x -= y;
    if (x < 0) x += mod;
}

int C (int k, int n) {
    if (k > n || k < 0) return 0;
    return 1LL * fact[n] * ifact[k] % mod * ifact[n - k] % mod;
}

int main(){
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    cin >> h >> w >> n; a[n + 1] = {h, w};
    fact[0] = ifact[0] = 1;
    for (int i = 1; i < N; i++) {
        fact[i] = 1LL * fact[i - 1] * i % mod;
        ifact[i] = binPow(fact[i], mod - 2);
    }

    for (int i = 1; i <= n; i++) cin >> a[i].first >> a[i].second;
    sort(a + 1, a + n + 2);
    for (int i = 1; i <= n + 1; i++) {
        dp[i] = C(a[i].first - 1, a[i].first + a[i].second - 2);
        for (int j = 1; j < i; j++) {
            sub(dp[i], 1LL * dp[j] * C(a[i].first - a[j].first, a[i].first + a[i].second - a[j].first - a[j].second) % mod);
        }
    }

    cout << dp[n + 1];
    return 0;
}
