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

const LL mod = 1e9 + 7 ;
const LL mx = 2e5 + 7 ;

LL fact[mx], inv_fact[mx] ;

LL powmod(LL base, LL exp, LL modulus = mod){
	base %= modulus;
	long long result = 1;
	while (exp > 0) {
		if (exp & 1LL) result = (result * base) % modulus;
		base = (base * base) % modulus;
		exp >>= 1;
	}
	return result;
}

void preprocess(){
	fact[0] = inv_fact[0] = 1LL ;
	for(LL i = 1 ; i < mx ; i++){
		fact[i] = (fact[i-1] * i) % mod ;
		inv_fact[i] = powmod(fact[i], mod-2LL) ;
	}
}

LL nCr(LL n, LL r){
	return (((fact[n] * inv_fact[r]) % mod) * inv_fact[n-r]) % mod ; 
}

int main(){

	preprocess() ;

	ios_base::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);
	
	LL H, W, N ;
	cin >> H >> W >> N ;

	vector<pair<int, int> > walls(N) ;
	for(auto &i : walls)
		cin >> i.first >> i.second ;
	walls.push_back(make_pair(H, W)) ;

	sort(walls.begin(), walls.end()) ;

	vector<LL> dp(N+1) ;

	for(int i = 0 ; i <= N ; i++){
		dp[i] = nCr(walls[i].first + walls[i].second - 2LL, walls[i].first - 1LL) ;
	}

	for(int i = 0 ; i <= N ; i++){
		for(int j = i + 1 ; j <= N ; j++){
			LL x = walls[j].first - walls[i].first ;
			LL y = walls[j].second - walls[i].second ;

			if(x < 0 || y < 0)
				continue ;
			
			dp[j] -= dp[i] * nCr(x + y, x) ;
			dp[j] = (dp[j] + mod) % mod ;
		}
	}

	dp[N] = (dp[N] + mod) % mod ;
	cout << dp[N] << endl ;

	return 0;
}