#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9 + 7;

int h, w;
int n;

int r[3055], c[3055];

int fact[200055], inv[200055];
int dp[200055];

int mod_pow(int n, int k) {
	if (k == 0) return 1;
	
	int res = mod_pow(n, k >> 1);
	res = (1ll * res * res) % MOD;
	
	if (k & 1) res = (1ll * res * n) % MOD;
	return res;
}
inline int comb(int n, int k) {
	return 1ll * fact[n] * inv[k] % MOD * inv[n - k] % MOD;
}
inline void sub(int &a, int b) {
	a -= b;
	
	if (a < 0) {
		a += MOD;
	}
}
int main() {
	cin >> h >> w >> n;
	
	for (int i = 0; i < n; i++) {
		cin >> r[i] >> c[i];
	}
	
	fact[0] = 1;
	
	for (int i = 1; i <= (int)2e5; i++) {
		fact[i] = (1ll * i * fact[i - 1]) % MOD;
	}
	
	for (int i = 0; i <= (int)2e5; i++) {
		inv[i] = mod_pow(fact[i], MOD - 2);
	}
	
	vector<int> vs;
	
	for (int i = 0; i < n; i++) {
		vs.push_back(i);
	}
	
	sort(vs.begin(), vs.end(), [&] (int v, int u) {
		if (r[v] == r[u]) return c[v] < c[u];
		return r[v] < r[u];
	});
	
	for (auto v : vs) {
		dp[v] = comb(r[v] + c[v] - 2, r[v] - 1);
		
		for (auto u : vs) {
			if (u == v) continue;
			if (!(r[u] <= r[v] && c[u] <= c[v])) continue;
			
			sub(dp[v], 1ll * dp[u] * comb((r[v] - r[u]) + (c[v] - c[u]), (r[v] - r[u])) % MOD);
		}
	}
	
	int res = comb(h + w - 2, h - 1);
	
	for (int i = 0; i < n; i++) {
		sub(res, 1ll * dp[i] * comb((h - r[i]) + (w - c[i]), (h - r[i])) % MOD);
	}
	
	cout << res;
}
