#include <bits/stdc++.h>
using namespace std;
int main() {
  long long(n), (m), (k);
  scanf("%lld%lld%lld", &(n), &(m), &(k));
  ;
  vector<vector<long long>> row(n), col(m);
  set<pair<long long, long long>> obs;
  for (long long i = 0; i < (k); i++) {
    long long(a), (b);
    scanf("%lld%lld", &(a), &(b));
    ;
    --a;
    --b;
    row[a].push_back(b);
    col[b].push_back(a);
    obs.insert({a, b});
  }
  for (long long i = 0; i < (n); i++) sort((row[i]).begin(), (row[i]).end());
  for (long long i = 0; i < (m); i++) sort((col[i]).begin(), (col[i]).end());
  long long sum = 0, dir = 1;
  long long l = 0, r = m - 1, u = 0, b = n - 1;
  while (l <= r && u <= b) {
    if (dir == 1) {
      if (obs.count({u, l})) break;
      auto it = upper_bound((row[u]).begin(), (row[u]).end(), l);
      if (it != row[u].end()) r = min(r, (*it) - 1);
      sum += (r - l + 1);
      u++;
      dir = 2;
    } else if (dir == 2) {
      if (obs.count({u, r})) {
        break;
      }
      auto it = upper_bound((col[r]).begin(), (col[r]).end(), u);
      if (it != col[r].end()) b = min(b, (*it) - 1);
      sum += (b - u + 1);
      r--;
      dir = 3;
    } else if (dir == 3) {
      if (obs.count({b, r})) break;
      auto it = upper_bound((row[b]).begin(), (row[b]).end(), r);
      if (it != row[b].begin()) {
        it--;
        l = max(l, (*it) + 1);
      }
      sum += (r - l + 1);
      b--;
      dir = 4;
    } else if (dir == 4) {
      if (obs.count({b, l})) break;
      auto it = upper_bound((col[l]).begin(), (col[l]).end(), b);
      if (it != col[l].begin()) {
        it--;
        u = max(u, (*it) + 1);
      }
      sum += (b - u + 1);
      l++;
      dir = 1;
    }
  }
  if (sum != n * m - k) {
    cout << "No\n";
    return 0;
  }
  printf("Yes\n");
  return 0;
}
