#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1;
int n, m, k, dir;
set<int> stx[N], sty[N], stx2, sty2;
set<int>::iterator it;
long long res;
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> m >> k;
  dir = (m > 1) ^ 1;
  for (int i = 1; i <= k; ++i) {
    int x, y;
    cin >> x >> y;
    if (x == 1 && y == 2) ++dir;
    stx[x].insert(y);
    sty[y].insert(x);
  }
  stx2.insert(0);
  stx2.insert(n + 1);
  sty2.insert(0);
  sty2.insert(m + 1);
  for (int i = 1; i <= n; ++i) {
    stx[i].insert(m + 1);
    stx[i].insert(0);
  }
  for (int i = 1; i <= m; ++i) {
    sty[i].insert(n + 1);
    sty[i].insert(0);
  }
  bool ok = 1;
  int x = 1, y = 1;
  while (ok) {
    int x2 = x, y2 = y;
    if (dir == 0)
      y2 = min(*stx[x].lower_bound(y) - 1, *sty2.upper_bound(y) - 1);
    if (dir == 1) {
      x2 = min(*sty[y].lower_bound(x) - 1, *stx2.upper_bound(x) - 1);
    }
    if (dir == 2) {
      it = stx[x].lower_bound(y);
      --it;
      y2 = *it + 1;
      it = sty2.lower_bound(y);
      --it;
      y2 = max(y2, *it + 1);
    }
    if (dir == 3) {
      it = sty[y].lower_bound(x);
      --it;
      x2 = *it + 1;
      it = stx2.lower_bound(x);
      --it;
      x2 = max(x2, *it + 1);
    }
    if (x == x2 && y == y2) break;
    res += abs(x - x2) + abs(y - y2);
    if (x != x2)
      sty2.insert(y);
    else
      stx2.insert(x);
    x = x2;
    y = y2;
    ++dir;
    dir %= 4;
  }
  if (res + 1 + k != 1ll * n * m)
    cout << "No";
  else
    cout << "Yes";
  return 0;
}
