#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const int N = 100005;
int n, m, k, i, minX, minY, maxX, maxY, dir, l, a, b, actX, actY;
set<int> row[N], col[N];
set<int>::iterator it;
long long res;
void print() {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++)
      if (row[i].find(j) != row[i].end())
        printf("#");
      else
        printf(".");
    printf("\n");
  }
  printf("\n");
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (i = 0; i < n; i++) {
    row[i].insert(-1);
    row[i].insert(m);
  }
  for (i = 0; i < m; i++) {
    col[i].insert(-1);
    col[i].insert(n);
  }
  minX = 0;
  minY = -1;
  maxX = n;
  maxY = m;
  for (i = 0; i < k; i++) {
    scanf("%d %d", &a, &b);
    a--;
    b--;
    row[a].insert(b);
    col[b].insert(a);
  }
  dir = 0;
  actX = actY = 0;
  res = 1;
  while (true) {
    if (dir == 0) {
      it = row[actX].lower_bound(actY);
      l = min(maxY, *it);
      if ((actX != 0 || actY != 0) && l == actY + 1) break;
      res += (l - actY - 1);
      dir++;
      actY = l - 1;
      maxY = l - 1;
    } else if (dir == 1) {
      it = col[actY].lower_bound(actX);
      l = min(maxX, *it);
      if (l == actX + 1) break;
      res += (l - actX - 1);
      dir++;
      actX = l - 1;
      maxX = l - 1;
    } else if (dir == 2) {
      it = row[actX].lower_bound(actY);
      it--;
      l = max(minY, *it);
      if (l == actY - 1) break;
      res += (actY - l - 1);
      dir++;
      actY = l + 1;
      minY = l + 1;
    } else if (dir == 3) {
      it = col[actY].lower_bound(actX);
      it--;
      l = max(minX, *it);
      if (l == actX - 1) break;
      res += (actX - l - 1);
      dir = 0;
      actX = l + 1;
      minX = l + 1;
    }
  }
  if (res == n * 1LL * m - k)
    printf("Yes\n");
  else
    printf("No\n");
  return 0;
}
