#include <bits/stdc++.h>
using namespace std;
long long hi = 1000000007;
long long fa[200005];
long long po(long long a, long long b) {
  if (b == 0) return 1;
  if (a == 1) return 1;
  long long x = po(a, b / 2);
  x = (x * x) % hi;
  if (b % 2) x = (a * x) % hi;
  return x;
}
long long ways(int x1, int y1, int x2, int y2) {
  int fir = x2 - x1;
  int sec = y2 - y1;
  long long num = fa[fir + sec];
  long long den = (fa[fir] * fa[sec]) % hi;
  den = po(den, hi - 2);
  return (num * den) % hi;
}
long long ans[5005];
int main() {
  int n, m, k;
  fa[0] = 1;
  for (n = 1; n <= 200003; n++) fa[n] = (n * fa[n - 1]) % hi;
  scanf("%d%d%d", &n, &m, &k);
  vector<pair<int, int> > v;
  int x, y, i;
  for (i = 0; i < k; i++) {
    scanf("%d%d", &x, &y);
    v.push_back(make_pair(x, y));
  }
  v.push_back(make_pair(n, m));
  sort(v.begin(), v.end());
  k++;
  int j;
  for (i = 0; i < k; i++) {
    ans[i] = ways(1, 1, v[i].first, v[i].second);
  }
  for (i = 0; i < k; i++) {
    for (j = i + 1; j < k; j++) {
      if (v[i].first > v[j].first || v[i].second > v[j].second)
        ;
      else {
        long long tmp =
            ans[i] * ways(v[i].first, v[i].second, v[j].first, v[j].second);
        tmp = tmp % hi;
        ans[j] = (ans[j] + hi - tmp) % hi;
      }
    }
  }
  cout << ans[k - 1] % hi;
  return 0;
}
