#include <bits/stdc++.h>
using namespace std;
long long poww(long long a, long long b, long long md) {
  return (!b ? 1
             : (b & 1 ? a * poww(a * a % md, b / 2, md) % md
                      : poww(a * a % md, b / 2, md) % md));
}
const long long MAXN = 1e5 + 10;
const long long INF = 8e18;
const long long MOD = 1e9 + 7;
set<pair<long long, long long> > st;
set<long long> lst[MAXN], rst[MAXN], ust[MAXN], dst[MAXN];
long long n, m, k;
int main() {
  cin >> n >> m >> k;
  long long u = 0, d = n + 1, l = 0, r = m + 1;
  for (int i = 0; i < k; i++) {
    long long x, y;
    cin >> x >> y;
    st.insert({x, y});
    dst[y].insert(x);
    ust[y].insert(-x);
    rst[x].insert(y);
    lst[x].insert(-y);
  }
  long long dir = 0, cnt = 0;
  while (u + 1 < d && l + 1 < r) {
    if (dir == 0) {
      u++;
      auto it = rst[u].lower_bound(l + 1);
      if (it != rst[u].end()) r = min(*it, r);
      cnt += r - l - 1;
    } else if (dir == 1) {
      r--;
      auto it = dst[r].lower_bound(u + 1);
      if (it != dst[r].end()) d = min(*it, d);
      cnt += d - u - 1;
    } else if (dir == 2) {
      d--;
      auto it = lst[d].lower_bound(-1 * (r - 1));
      if (it != lst[d].end()) l = max(-1 * (*it), l);
      cnt += r - l - 1;
    } else if (dir == 3) {
      l++;
      auto it = ust[l].lower_bound(-1 * (d - 1));
      if (it != ust[l].end()) u = max(-1 * (*it), u);
      cnt += d - u - 1;
    }
    dir++;
    dir %= 4;
  }
  if (cnt == n * m - k) return cout << "Yes" << '\n', 0;
  cout << "No" << '\n';
  return 0;
}
