#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
set<int> r[N], d[N];
set<int, greater<int>> l[N], u[N];
bool f(int m, int n, int k, int f) {
  int left = 1, right = m, up = 1, down = n;
  int x = 1, y = 1, face = f;
  long long c = 1;
  while (true) {
    if (face == 1) {
      auto it = r[x].upper_bound(y);
      if (y == right) {
        break;
      }
      if (it != r[x].end()) {
        if (*it == y + 1) {
          break;
        }
        right = min(*it - 1, right);
      }
      c += right - y;
      y = right;
      ++up;
      face = 2;
    } else if (face == 2) {
      auto it = d[y].upper_bound(x);
      if (x == down) {
        break;
      }
      if (it != d[y].end()) {
        if (*it == x + 1) {
          break;
        }
        down = min(*it - 1, down);
      }
      c += down - x;
      x = down;
      --right;
      face = 3;
    } else if (face == 3) {
      auto it = l[x].upper_bound(y);
      if (y == left) {
        break;
      }
      if (it != l[x].end()) {
        if (*it == y - 1) {
          break;
        }
        left = max(*it + 1, left);
      }
      c += y - left;
      y = left;
      --down;
      face = 4;
    } else {
      auto it = u[y].upper_bound(x);
      if (x == up) {
        break;
      }
      if (it != u[y].end()) {
        if (*it == x - 1) {
          break;
        }
        up = max(*it + 1, up);
      }
      c += x - up;
      x = up;
      ++left;
      face = 1;
    }
  }
  return c == static_cast<long long>(n) * m - k;
}
int main() {
  int n, m, k;
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0; i < k; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    r[x].insert(y);
    l[x].insert(y);
    u[y].insert(x);
    d[y].insert(x);
  }
  if (f(m, n, k, 1) || f(m, n, k, 2)) {
    printf("YES\n");
  } else {
    printf("NO\n");
  }
  return 0;
}
