#include <bits/stdc++.h>
#define int long long
#define F first
#define S second
#define maxn 200005
using namespace std;

const int mod = 1e9 + 7;

vector<pair<int, int>> v;
int p[maxn], dp[maxn] = {};
int H, W, n;

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

int C(int x, int y) {
    return p[x] * power(p[x - y] * p[y] % mod, mod - 2) % mod;
}

int cal(pair<int, int> x, pair<int, int> y) {
    int X = y.F - x.F;
    int Y = y.S - x.S;
    return C(X + Y, X);
}

int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> H >> W >> n;
    p[0] = 1;
    for(int i = 1; i < maxn; i++) {
        p[i] = p[i - 1] * i % mod;
    }
    for(int i = 0; i < n; i++) {
        int r, c; cin >> r >> c;
        v.emplace_back(r, c);
    }
    dp[1] = 1;
    v.emplace_back(1, 1);
    v.emplace_back(H, W);
    sort(begin(v), end(v));
    for(int i = 1; i < (int)v.size(); i++) {
        dp[i] = cal(v[0], v[i]);
        for(int j = i - 1; j >= 0; j--) {
            if(v[j].S <= v[i].S) {
                dp[i] = (dp[i] - dp[j] * cal(v[j], v[i]) % mod + mod) % mod;
            }
        }
    }
    cout << dp[(int)v.size() - 1] << '\n';
    return 0;
}
