#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
void pr(const pair<T1, T2>& x);
template <class T, size_t SZ>
void pr(const array<T, SZ>& x);
template <class T>
void pr(const vector<T>& x);
template <class T>
void pr(const set<T>& x);
template <class T1, class T2>
void pr(const map<T1, T2>& x);
template <class T>
void pr(const T& x) {
  cout << x;
}
template <class Arg, class... Args>
void pr(const Arg& first, const Args&... rest) {
  pr(first);
  pr(rest...);
}
template <class T1, class T2>
void pr(const pair<T1, T2>& x) {
  pr("{", x.first, ", ", x.second, "}");
}
template <class T>
void prContain(const T& x) {
  pr("{");
  bool fst = 1;
  for (auto& a : x) pr(!fst ? ", " : "", a), fst = 0;
  pr("}");
}
template <class T, size_t SZ>
void pr(const array<T, SZ>& x) {
  prContain(x);
}
template <class T>
void pr(const vector<T>& x) {
  prContain(x);
}
template <class T>
void pr(const set<T>& x) {
  prContain(x);
}
template <class T1, class T2>
void pr(const map<T1, T2>& x) {
  prContain(x);
}
void ps() { pr("\n"); }
template <class Arg, class... Args>
void ps(const Arg& first, const Args&... rest) {
  pr(first, " ");
  ps(rest...);
}
template <typename T>
int remin(T& a, const T& b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
int remax(T& a, const T& b) {
  if (b > a) {
    a = b;
    return true;
  }
  return false;
}
int N, M, K;
set<int> rows[100005];
set<int> col[100005];
int r, c, lr, hr, lc, hc;
int d;
int main(int argc, const char** argv) {
  scanf("%d%d%d", &N, &M, &K);
  for (int i = 0; i < K; ++i) {
    scanf("%d%d", &r, &c);
    rows[r].insert(c);
    col[c].insert(r);
  }
  for (int i = 1; i <= N; ++i) {
    rows[i].insert(0);
    rows[i].insert(M + 1);
  }
  for (int i = 1; i <= M; ++i) {
    col[i].insert(0);
    col[i].insert(N + 1);
  }
  col[1].insert(1);
  rows[1].insert(1);
  lr = lc = 1;
  hr = N;
  hc = M;
  d = 0;
  r = 1, c = 1;
  long long steps = 1;
  int cnt = 0;
  bool first = true;
  while (true) {
    if (d == 0) {
      auto itr = rows[r].lower_bound(c + 1);
      int cc = *itr - 1;
      cc = min(cc, hc);
      steps += cc - c;
      if (c == cc && !first) break;
      first = false;
      c = cc;
      hc = c - 1;
      lr = r + 1;
    } else if (d == 1) {
      auto itr = col[c].lower_bound(r + 1);
      int rr = *itr - 1;
      rr = min(rr, hr);
      steps += rr - r;
      if (r == rr) break;
      r = rr;
      hr = r - 1;
      hc = c - 1;
    } else if (d == 2) {
      auto itr = rows[r].lower_bound(c);
      int cc = *(--itr) + 1;
      cc = max(cc, lc);
      steps += c - cc;
      if (c == cc) break;
      c = cc;
      lc = c + 1;
      hr = r - 1;
    } else if (d == 3) {
      auto itr = col[c].lower_bound(r);
      int rr = *(--itr) + 1;
      rr = max(rr, lr);
      steps += r - rr;
      if (r == rr) break;
      r = rr;
      lr = r + 1;
      lc = c + 1;
    }
    if (cnt >= 4) break;
    rows[r].insert(c);
    col[c].insert(r);
    d = (d + 1) % 4;
  }
  ps(steps == 1LL * N * M - K ? "YES" : "NO");
  return 0;
}
