#include<bits/stdc++.h>

using namespace std;

const int N = 3e3 + 5, mod = 1e9 + 7, MAXX = 2e5 + 5;
int h, w, n, dp[N], fact[MAXX], invFact[MAXX];

struct Cell {
    int x, y;
    Cell (int x = 0, int y = 0) : x(x), y(y) {}
    bool operator< (const Cell& rhs) const { return x == rhs.x ? y < rhs.y : x < rhs.x; }
} cell[N];

int binPow (int _a, int _m) {
    int ret = 1;
    for (; _m; _m >>= 1, _a = 1LL * _a * _a % mod) if (_m & 1) ret = 1LL * ret * _a % mod;
    return ret;
}

int C (int _k, int _n) { return 1LL * fact[_n] * invFact[_k] % mod * invFact[_n - _k] % mod; }

int main () {
    fact[0] = 1; for (int i = 1; i < MAXX; ++i) fact[i] = 1LL * fact[i - 1] * i % mod;
    invFact[MAXX - 1] = binPow(fact[MAXX - 1], mod - 2);
    for (int i = MAXX - 2; i >= 0; --i) invFact[i] = 1LL * invFact[i + 1] * (i + 1) % mod;


    scanf("%d %d %d", &h, &w, &n);
    for (int i = 1; i <= n; ++i) {
        int x, y; scanf("%d %d", &x, &y);
        cell[i] = Cell(x, y);
    }
    cell[0] = Cell(1, 1);
    cell[n + 1] = Cell(h, w);
    sort(cell, cell + n + 2);

    for (int i = 1; i <= n + 1; ++i) {
        dp[i] = C(cell[i].x - 1, cell[i].x + cell[i].y - 2);
        for (int j = 1; j < i; ++j) {
            if (cell[j].y <= cell[i].y) dp[i] = (dp[i] - 1LL * dp[j] * C(cell[i].x - cell[j].x, cell[i].x - cell[j].x + cell[i].y - cell[j].y) ) % mod;
        }
    }

    cout << (dp[n + 1] + mod) % mod;

    return 0;
}
