#include <bits/stdc++.h>
using namespace std;
void canhazfast() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
}
template <typename T>
T gcd(T a, T b) {
  return b ? gcd(b, a % b) : a;
}
template <typename T>
T extgcd(T a, T b, T &x, T &y) {
  T x0 = 1, y0 = 0, x1 = 0, y1 = 1;
  while (b) {
    T q = a / b;
    a %= b;
    swap(a, b);
    x0 -= q * x1;
    swap(x0, x1);
    y0 -= q * y1;
    swap(y0, y1);
  }
  x = x0;
  y = y0;
  return a;
}
int ctz(unsigned x) { return __builtin_ctz(x); }
int ctzll(unsigned long long x) { return __builtin_ctzll(x); }
int clz(unsigned x) { return __builtin_clz(x); }
int clzll(unsigned long long x) { return __builtin_clzll(x); }
int popcnt(unsigned x) { return __builtin_popcount(x); }
int popcntll(unsigned long long x) { return __builtin_popcountll(x); }
int bsr(unsigned x) { return 31 ^ clz(x); }
int bsrll(unsigned long long x) { return 63 ^ clzll(x); }
const int dx[4] = {0, +1, 0, -1};
const int dy[4] = {+1, 0, -1, 0};
vector<int> row[100016], col[100016];
int nxt_lo(const vector<int> &v, int p) {
  return lower_bound((v).begin(), (v).end(), p)[-1];
}
int nxt_hi(const vector<int> &v, int p) {
  return lower_bound((v).begin(), (v).end(), p)[0];
}
int main() {
  canhazfast();
  int n, m, k;
  int xl = -1, xh;
  int yl = -1, yh;
  int xc = 0, yc = 0;
  long long cnt = 1;
  bool turned = false;
  cin >> n >> m >> k;
  xh = n;
  yh = m;
  for (int i = 0; i < k; ++i) {
    int x, y;
    cin >> x >> y;
    --x;
    --y;
    row[x].push_back(y);
    col[y].push_back(x);
  }
  for (int i = 0; i < n; ++i) {
    row[i].push_back(-1);
    row[i].push_back(m);
    sort((row[i]).begin(), (row[i]).end());
  }
  for (int j = 0; j < m; ++j) {
    col[j].push_back(-1);
    col[j].push_back(n);
    sort((col[j]).begin(), (col[j]).end());
  }
  for (;;) {
    int xd, yd;
    yd = min(nxt_hi(row[xc], yc), yh) - 1;
    cnt += yd - yc;
    if (turned && yd == yc) break;
    yc = yd;
    xl = xc;
    turned = true;
    xd = min(nxt_hi(col[yc], xc), xh) - 1;
    cnt += xd - xc;
    if (xd == xc) break;
    xc = xd;
    yh = yc;
    yd = max(nxt_lo(row[xc], yc), yl) + 1;
    cnt += yc - yd;
    if (yd == yc) break;
    yc = yd;
    xh = xc;
    xd = max(nxt_lo(col[yc], xc), xl) + 1;
    cnt += xc - xd;
    if (xd == xc) break;
    xc = xd;
    yl = yc;
  }
  if (cnt == (long long)n * m - k)
    cout << "Yes\n";
  else
    cout << "No\n";
  return 0;
}
