#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e5 + 123;
const long long INF = (long long)1e18 + 123;
const int inf = (int)1e9 + 123;
const int MOD = (int)1e9 + 7;
void megaRandom() {
  unsigned int FOR;
  asm("rdtsc" : "=A"(FOR));
  srand(FOR);
}
int n, m, k;
pair<pair<int, int>, int> p[N], z[N];
pair<int, int> to[] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
bool was[N];
vector<pair<int, int> > js[N], is[N];
int mnjs[N], mxjs[N], mnis[N], mxis[N];
int find_min(bool who, int o, int &l) {
  if (!who) {
    while (l < (int)(js[o].size()) && was[js[o][l].second]) l++;
    if (l >= (int)(js[o].size())) return -1;
  } else {
    while (l < (int)(is[o].size()) && was[is[o][l].second]) l++;
    if (l >= (int)(is[o].size())) return -1;
  }
  return l;
}
int find_max(bool who, int o, int &r) {
  if (!who) {
    if (!(int)(js[o].size())) return -1;
    while (r >= 0 && was[js[o][r].second]) r--;
  } else {
    if (!(int)(is[o].size())) return -1;
    while (r >= 0 && was[is[o][r].second]) r--;
  }
  if (r < 0) return -1;
  return r;
}
int delete_suff(bool who, int mnval, int &r) {
  int cnt = 0;
  if (!who) {
    while (r >= 1 && (was[p[r].second] || p[r].first.first >= mnval))
      cnt += (was[p[r].second] ^ 1), was[p[r].second] = 1, r--;
  } else {
    while (r >= 1 && (was[z[r].second] || z[r].first.first >= mnval))
      cnt += (was[z[r].second] ^ 1), was[z[r].second] = 1, r--;
  }
  return cnt;
}
int delete_pref(bool who, int mxval, int &l) {
  int cnt = 0;
  if (!who) {
    while (l <= k && (was[p[l].second] || p[l].first.first <= mxval))
      cnt += (was[p[l].second] ^ 1), was[p[l].second] = 1, l++;
  } else {
    while (l <= k && (was[z[l].second] || z[l].first.first <= mxval))
      cnt += (was[z[l].second] ^ 1), was[z[l].second] = 1, l++;
  }
  return cnt;
}
void no() {
  puts("No");
  exit(0);
}
int main() {
  megaRandom();
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++) {
    cin >> p[i].first.first >> p[i].first.second;
    z[i].first = make_pair(p[i].first.second, p[i].first.first);
    p[i].second = z[i].second = i;
    mnjs[p[i].first.first] = 0;
    mnis[p[i].first.first] = 0;
    js[p[i].first.first].push_back(make_pair(p[i].first.second, i));
    is[p[i].first.second].push_back(make_pair(p[i].first.first, i));
  }
  for (int i = 1; i <= n; i++) {
    sort(js[i].begin(), js[i].end());
    mxjs[i] = (int)(js[i].size()) - 1;
  }
  for (int i = 1; i <= m; i++) {
    sort(is[i].begin(), is[i].end());
    mxis[i] = (int)(is[i].size()) - 1;
  }
  sort(p + 1, p + k + 1);
  sort(z + 1, z + k + 1);
  int i = 1, j = 1, toi = -1, toj = -1, dir = 0;
  int lp = 1, lz = 1, rp = k, rz = k;
  int min_n = 1, min_m = 1, cur_n = n, cur_m = m, cnt = 0;
  while (1) {
    if (min_n > cur_n || min_m > cur_m) break;
    toi = -1, toj = -1;
    if (dir == 0) {
      toj = cur_m;
      if (find_min(0, i, mnjs[i]) != -1) {
        toj = js[i][mnjs[i]].first - 1;
        cnt = delete_suff(1, toj + 1, rz);
        if (1ll * (cur_m - toj) * (cur_n - min_n + 1) != cnt) no();
      }
      j = toj, cur_m = toj, min_n++;
    }
    if (dir == 1) {
      toi = cur_n;
      if (find_min(1, j, mnis[j]) != -1) {
        toi = is[j][mnis[j]].first - 1;
        cnt = delete_suff(0, toi + 1, rp);
        if (1ll * (cur_n - toi) * (cur_m - min_m + 1) != cnt) no();
      }
      i = toi, cur_n = toi, cur_m--;
    }
    if (dir == 2) {
      toj = min_m;
      if (find_max(0, i, mxjs[i]) != -1) {
        toj = js[i][mxjs[i]].first + 1;
        cnt = delete_pref(1, toj - 1, lz);
        if (1ll * (toj - min_m) * (cur_n - min_n + 1) != cnt) no();
      }
      j = toj, min_m = toj, cur_n--;
    }
    if (dir == 3) {
      toi = min_n;
      if (find_max(1, j, mxis[j]) != -1) {
        toi = is[j][mxis[j]].first + 1;
        cnt = delete_pref(0, toi - 1, lp);
        if (1ll * (toi - min_n) * (cur_m - min_m + 1) != cnt) no();
      }
      i = toi, min_n = toi, min_m++;
    }
    dir = (dir + 1) % 4;
  }
  puts("Yes");
  return 0;
}
