#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int32_t main() {
  long long n, m, k;
  cin >> n >> m >> k;
  vector<long long> mx[n + 1];
  vector<long long> my[m + 1];
  for (long long i = 0; i < k; i++) {
    long long x, y;
    cin >> x >> y;
    mx[x].push_back(y);
    my[y].push_back(x);
  }
  if (k == 0 || k + 1 == n * m) return cout << "Yes", 0;
  long long traversed = 0;
  for (long long i = 1; i <= n; i++) {
    mx[i].push_back(m + 1);
    mx[i].push_back(0);
    sort(mx[i].begin(), mx[i].end());
  }
  for (long long i = 1; i <= m; i++) {
    my[i].push_back(n + 1);
    my[i].push_back(0);
    sort(my[i].begin(), my[i].end());
  }
  map<long long, long long> yDown, yUp, xLeft, xRight;
  long long xn = 1, yn = 1, x = 0, y = 0;
  long long dir = 1, axis = 1;
  yUp[0] = 1;
  while (!(xn == x && yn == y && x != 1)) {
    y = yn;
    x = xn;
    if (dir == 1 && axis == 1) {
      auto it = upper_bound(mx[x].begin(), mx[x].end(), y);
      xRight[*it]++;
      xn = x;
      yn = max(y, *it - xRight[*it]);
      traversed += yn - y;
      dir = -1;
    } else if (dir == -1 && axis == 1) {
      auto it = upper_bound(mx[x].begin(), mx[x].end(), y);
      it--;
      xLeft[*it]++;
      xn = x;
      yn = min(y, *it + xLeft[*it]);
      traversed += abs(y - yn);
      dir = 1;
    } else if (dir == 1 && axis == 0) {
      auto it = upper_bound(my[y].begin(), my[y].end(), x);
      it--;
      yUp[*it]++;
      yn = y;
      xn = min(x, *it + yUp[*it]);
      traversed += abs(xn - x);
    } else if (dir == -1 && axis == 0) {
      auto it = upper_bound(my[y].begin(), my[y].end(), x);
      yDown[*it]++;
      yn = y;
      xn = max(x, *it - yDown[*it]);
      traversed += abs(xn - x);
    }
    axis ^= 1;
  }
  if (traversed + k + 1 == n * m)
    cout << "Yes";
  else
    cout << "No";
  return 0;
}
