#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
const long long mod = 1e9 + 7;
set<int> x[maxn], y[maxn];
int main() {
  int n, m, k;
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &k);
  for (int i = (1); i <= (k); i++) {
    int xx, yy;
    scanf("%d", &xx);
    scanf("%d", &yy);
    x[xx].insert(yy);
    y[yy].insert(xx);
  }
  if (k == 0) {
    puts("YES");
    return 0;
  }
  int nowx = 1, nowy = 1;
  int nu = 0, nd = n + 1, nl = 0, nr = m + 1;
  int dct = 0;
  long long sum = 0;
  while (1) {
    long long asum = 0;
    if (nowx == 1 && nowy == 1)
      if (x[1].count(2) || nr == 2) {
        if (y[1].size()) {
          sum += min(*y[1].begin(), nd) - nowx - 1;
        } else {
          sum += nd - nowx - 1;
        }
        break;
      }
    if (dct == 0) {
      while (x[nowx].size() && *x[nowx].begin() < nowy)
        x[nowx].erase(*x[nowx].begin());
      if (x[nowx].size()) {
        if (*x[nowx].begin() >= nr) {
          asum += nr - nowy;
          nowy = nr - 1;
        } else {
          asum += *x[nowx].begin() - nowy;
          nowy = *x[nowx].begin() - 1;
          nr = *x[nowx].begin();
        }
      } else {
        asum += nr - nowy;
        nowy = nr - 1;
      }
      nu = nowx;
    }
    if (dct == 1) {
      while (y[nowy].size() && *y[nowy].begin() < nowx)
        y[nowy].erase(*y[nowy].begin());
      if (y[nowy].size()) {
        if (*y[nowy].begin() >= nd) {
          asum += nd - nowx;
          nowx = nd - 1;
        } else {
          asum += *y[nowy].begin() - nowx;
          nowx = *y[nowy].begin() - 1;
          nd = *y[nowy].begin();
        }
      } else {
        asum += nd - nowx;
        nowx = nd - 1;
      }
      nr = nowy;
    }
    if (dct == 2) {
      while (x[nowx].size() && *x[nowx].rbegin() > nowy)
        x[nowx].erase(*x[nowx].rbegin());
      if (x[nowx].size()) {
        if (*x[nowx].rbegin() <= nl) {
          asum += nowy - nl;
          nowy = nl + 1;
        } else {
          asum += nowy - *x[nowx].rbegin();
          nowy = *x[nowx].rbegin() + 1;
          nl = *x[nowx].rbegin();
        }
      } else {
        asum += nowy - nl;
        nowy = nl + 1;
      }
      nd = nowx;
    }
    if (dct == 3) {
      while (y[nowy].size() && *y[nowy].rbegin() > nowx)
        y[nowy].erase(*y[nowy].rbegin());
      if (y[nowy].size()) {
        if (*y[nowy].rbegin() <= nu) {
          asum += nowx - nu;
          nowx = nu + 1;
        } else {
          asum += nowx - *y[nowy].rbegin();
          nowx = *y[nowy].rbegin() + 1;
          nu = *y[nowy].rbegin();
        }
      } else {
        asum += nowx - nu;
        nowx = nu + 1;
      }
      nl = nowy;
    }
    if (asum - 1 == 0) break;
    sum += asum - 1;
    dct = (dct + 1) % 4;
  }
  if (sum + k + 1 == 1ll * n * m)
    puts("YES");
  else
    puts("NO");
}
