#include "bits/stdc++.h"

#define int long long

using namespace std;

const int mod = 1e9+7;

vector<int> f(2e5 + 10), inv_f(2e5 + 10);

int bin_pow(int a, int b) {
    if (b == 0) {
        return 1;
    }
    int res = bin_pow(a, b / 2);
    res *= res;
    res %= mod;
    if (b % 2) {
        res *= a;
        res %= mod;
    }
    return res;
}

int inv(int a) {
    return bin_pow(a, mod - 2);
}

int c(int n, int k) {
    return f[n] * inv_f[n - k] % mod * inv_f[k] % mod;
}

int32_t main() {
    f[0] = 1;
    for (int i = 1; i < f.size(); i++) {
        f[i] = i * f[i - 1] % mod;
    }
    for (int i = 0; i < f.size(); i++) {
        inv_f[i] = inv(f[i]);
    }
    int h, w;
    cin >> h >> w;
    int n;
    cin >> n;
    vector<pair<int, int>> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i].first >> a[i].second;
        a[i].first--; a[i].second--;
    }
    n++;
    a.push_back({h - 1, w - 1});
    sort(a.begin(), a.end());
    vector<int> dp(n);
    for (int i = 0; i < n; i++) {
        int x = a[i].first, y = a[i].second;
        dp[i] = c(x + y, x);
        for (int j = 0; j < i; j++) {
            int cx = a[j].first, cy = a[j].second;
            if (cx <= x && cy <= y) {
                dp[i] += mod - dp[j] * c(x - cx + y - cy, x - cx) % mod;
                dp[i] %= mod;
            }
        }
    }
    cout << dp.back() << endl;
}
