#include <bits/stdc++.h>
using namespace std;
int N, M, K;
pair<int, int> obsX[100005], obsY[100005];
bool cmpY(pair<int, int> a, pair<int, int> b) {
  if (a.second == b.second)
    return a.first < b.first;
  else
    return a.second < b.second;
}
void input() {
  cin >> N >> M >> K;
  for (int i = 0; i < K; i++) {
    int x, y;
    cin >> x >> y;
    obsX[i] = {x, y};
    obsY[i] = {x, y};
  }
  sort(obsX, obsX + K);
  sort(obsY, obsY + K, cmpY);
}
int findL(pair<int, int> P) {
  int i = lower_bound(obsX, obsX + K, P) - obsX - 1;
  if (i < 0) return -987654321;
  pair<int, int> found = obsX[i];
  if (found.first != P.first) return -987654321;
  return found.second;
}
int findR(pair<int, int> P) {
  int i = lower_bound(obsX, obsX + K, P) - obsX;
  if (i >= K) return 987654321;
  pair<int, int> found = obsX[i];
  if (found.first != P.first) return 987654321;
  return found.second;
}
int findU(pair<int, int> P) {
  int i = lower_bound(obsY, obsY + K, P, cmpY) - obsY - 1;
  if (i < 0) return -987654321;
  pair<int, int> found = obsY[i];
  if (found.second != P.second) return -987654321;
  return found.first;
}
int findD(pair<int, int> P) {
  int i = lower_bound(obsY, obsY + K, P, cmpY) - obsY;
  if (i >= K) return 987654321;
  pair<int, int> found = obsY[i];
  if (found.second != P.second) return 987654321;
  return found.first;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  input();
  int up = 1, down = N, left = 1, right = M;
  int dir = 0;
  long long visited = 0;
  while (true) {
    int toVisit;
    if (dir == 0) {
      int to = min(findR({up, left - 1}) - 1, right);
      toVisit = to - left + 1;
      if (toVisit == 0) break;
      up++;
      right = to;
    } else if (dir == 1) {
      int to = min(findD({up - 1, right}) - 1, down);
      toVisit = to - up + 1;
      if (toVisit == 0) break;
      right--;
      down = to;
    } else if (dir == 2) {
      int to = max(findL({down, right + 1}) + 1, left);
      toVisit = right - to + 1;
      if (toVisit == 0) break;
      down--;
      left = to;
    } else if (dir == 3) {
      int to = max(findU({down + 1, left}) + 1, up);
      toVisit = down - to + 1;
      if (toVisit == 0) break;
      left++;
      up = to;
    }
    visited += toVisit;
    dir = (dir + 1) % 4;
  }
  if (visited + K == (long long)N * M) {
    cout << "Yes"
         << "\n";
  } else {
    cout << "No"
         << "\n";
  }
  return 0;
}
