#include <bits/stdc++.h>
using namespace std;
const int cap = 1e5 + 7;
set<int> ver[cap], vec[cap];
long long n, m, k;
int main() {
  scanf("%lld%lld%lld", &n, &m, &k);
  for (int i = 1, x, y; i <= k; i++)
    scanf("%d%d", &x, &y), ver[x].insert(y), vec[y].insert(x);
  int dir = 1, x = 1, y = 1;
  long long num = 1;
  int rl = n, ru = 1, cl = 1, cr = m;
  while (rl >= ru && cl <= cr) {
    if (dir == 1) {
      auto p = ver[x].lower_bound(y);
      if (ver[x].empty() || p == ver[x].end())
        num += cr - y, y = cr;
      else
        cr = min(*p - 1, cr), num += abs(cr - y), y = cr;
      ru = max(x + 1, ru);
      dir = 2;
    } else if (dir == 2) {
      auto p = vec[y].lower_bound(x);
      if (vec[y].empty() || p == vec[y].end())
        num += rl - x, x = rl;
      else
        rl = min(rl, *p - 1), num += abs(rl - x), x = rl;
      cr = min(cr, y - 1);
      dir = 3;
    } else if (dir == 3) {
      auto p = ver[x].lower_bound(y);
      if (ver[x].empty() || p == ver[x].begin())
        num += y - cl, y = cl;
      else
        cl = max(cl, *(--p) + 1), num += abs(y - cl), y = cl;
      rl = min(rl, x - 1);
      dir = 4;
    } else {
      auto p = vec[y].lower_bound(x);
      if (vec[y].empty() || p == vec[y].begin())
        num += x - ru, x = ru;
      else
        ru = max(ru, *(--p) + 1), num += abs(x - ru), x = ru;
      cl = max(cl, y + 1);
      dir = 1;
    }
  }
  if (num == n * m - k)
    puts("Yes");
  else
    puts("No");
  return 0;
}
