#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 10;
const int mod = 1000000000 + 7;
set<int> stx[maxn], sty[maxn];
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 1; i <= n; i++) {
    stx[i].insert(0);
    stx[i].insert(m + 1);
  }
  for (int i = 1; i <= m; i++) {
    sty[i].insert(0);
    sty[i].insert(n + 1);
  }
  for (int i = 1; i <= k; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    stx[x].insert(y);
    sty[y].insert(x);
  }
  int sx = 1, sy = 1;
  int flag = 1;
  int x1 = 0, x2 = n + 1, y1 = 0, y2 = m + 1;
  long long cnt = 1, lcnt = 0;
  while (k) {
    if (flag == 0) {
      auto it = sty[sy].lower_bound(sx);
      it--;
      int tmp = max(*it, x1);
      cnt += sx - (tmp + 1);
      sx = tmp + 1;
      x1 = tmp + 1;
      y1 = sy;
    } else if (flag == 1) {
      auto it = stx[sx].lower_bound(sy);
      int tmp = min(*it, y2);
      cnt += tmp - 1 - sy;
      sy = tmp - 1;
      y2 = tmp - 1;
      x1 = sx;
    } else if (flag == 2) {
      auto it = sty[sy].lower_bound(sx);
      int tmp = min(*it, x2);
      cnt += tmp - 1 - sx;
      sx = tmp - 1;
      x2 = tmp - 1;
      y2 = sy;
    } else {
      auto it = stx[sx].lower_bound(sy);
      it--;
      int tmp = max(*it, y1);
      cnt += sy - (tmp + 1);
      sy = tmp + 1;
      y1 = tmp + 1;
      x2 = sx;
    }
    flag = (flag + 1) % 4;
    if (cnt == lcnt && (sx != 1 || sy != 1)) break;
    if (cnt + k == (long long)n * m) break;
    lcnt = cnt;
    if (sx == 1 && sy == 1 && (flag != 1 && flag != 2)) break;
  }
  if ((!k) || cnt + k == (long long)n * m) {
    printf("Yes\n");
  } else {
    printf("No\n");
  }
  getchar();
  getchar();
  return 0;
}
