#include <cstdio>
#include <utility>
#include <algorithm>
using namespace std;
const int mod = 1000000007;
long long f[200010], inv[200010], invf[200010];
long long comb(int n, int k) {
	if (n < 0 || k < 0 || k > n) return 0;
	return f[n] * invf[k] % mod * invf[n-k] % mod;
}
long long g(int x, int y) {
	return comb(x + y, x);
}
pair<int, int> p[3010];
long long dp[3010];
int main() {
	int h, w, n;
	scanf("%d%d%d", &h, &w, &n);
	for (int i = 0; i < n; i++) {
		scanf("%d%d", &p[i].first, &p[i].second);
		--p[i].first; --p[i].second;
	}
	f[0] = inv[0] = invf[0] = 1;
	f[1] = inv[1] = invf[1] = 1;
	for (int i = 2; i <= 200000; i++) {
		f[i] = f[i-1] * i % mod;
		inv[i] = mod - mod / i * inv[mod%i] % mod;
		invf[i] = invf[i-1] * inv[i] % mod;
	}
	--h; --w;
	sort(p, p + n);
	long long ans = g(h, w);
	for (int i = 0; i < n; i++) {
		dp[i] = g(p[i].first, p[i].second);
		for (int j = 0; j < n; j++) {
			if (i != j && p[i].first >= p[j].first && p[i].second >= p[j].second) {
				dp[i] -= dp[j] * g(p[i].first - p[j].first, p[i].second - p[j].second) % mod;
				if (dp[i] < 0) dp[i] += mod;
			}
		}
		ans -= dp[i] * g(h - p[i].first, w - p[i].second) % mod;
		if (ans < 0) ans += mod;
	}
	printf("%lld\n", ans);
	return 0;
}
