#include <bits/stdc++.h>
using namespace std;
void fun() {}
long long int md = 1e9 + 7;
long long int __gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return __gcd(b, a % b);
}
long long int poww(long long int a, long long int b, long long int md) {
  if (b < 0) return 0;
  if (a == 0) return 0;
  long long int res = 1;
  while (b) {
    if (b & 1) {
      res = (1ll * res * a) % md;
    }
    a = (1ll * a * a) % md;
    b >>= 1;
  }
  return res;
}
long long int poww(long long int a, long long int b) {
  if (b < 0) return 0;
  if (a == 0) return 0;
  long long int res = 1;
  while (b) {
    if (b & 1) {
      res = (1ll * res * a);
    }
    a = (1ll * a * a);
    b >>= 1;
  }
  return res;
}
void ainp(long long int arr[], long long int n) {
  for (long long int i = 1; i <= n; i++) cin >> arr[i];
}
long long int divide(long long int a, long long int b, long long int md) {
  long long int rr = a * (poww(b, md - 2, md));
  rr %= md;
  return rr;
}
const long long int size = 2001;
pair<long long int, long long int> rc[size];
long long int h, w, n;
long long int fact[(long long int)2e5 + 2];
long long int dp[size];
void pre() {
  fact[0] = 1;
  for (long long int i = 1; i <= 2e5 + 1; i++) fact[i] = (fact[i - 1] * i) % md;
}
long long int findways(long long int r1, long long int c1, long long int r2,
                       long long int c2) {
  if (c1 > c2) return 0;
  long long int rows = r2 - r1, cols = c2 - c1;
  long long int ans = fact[rows + cols];
  ans = divide(ans, fact[rows], md);
  ans = divide(ans, fact[cols], md);
  return ans;
}
void calcdp() {
  for (long long int i = 1; i <= n; i++) {
    dp[i] = findways(1, 1, rc[i].first, rc[i].second);
    long long int sub = 0;
    for (long long int j = 1; j < i; j++)
      sub = (sub +
             findways(rc[j].first, rc[j].second, rc[i].first, rc[i].second) *
                 dp[j] % md) %
            md;
    dp[i] = (dp[i] - sub + md) % md;
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  fun();
  cin >> h >> w >> n;
  pre();
  long long int ans = findways(1, 1, h, w);
  for (long long int i = 1; i <= n; i++) cin >> rc[i].first >> rc[i].second;
  sort(rc + 1, rc + n + 1);
  calcdp();
  long long int sub = 0;
  for (long long int i = 1; i <= n; i++)
    sub = (sub + dp[i] * findways(rc[i].first, rc[i].second, h, w) % md) % md;
  ans = (ans - sub + md) % md;
  cout << ans << "\n";
  return 0;
}
