#include <bits/stdc++.h>
const double PI = 3.141592653589793238460;
using namespace std;
set<int> C[100011], R[100011];
int main() {
  long long int n, m, k, x, y, tmp;
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++) {
    cin >> x >> y;
    R[x].insert(y);
    C[y].insert(x);
  }
  for (int i = 1; i <= n + 2; i++) R[i - 1].insert(0), R[i - 1].insert(m + 1);
  for (int i = 1; i <= m + 2; i++) C[i - 1].insert(0), C[i - 1].insert(n + 1);
  long long int cnt = 1;
  int dir = 1;
  int minX = 1;
  int minY = 0;
  int maxX = n + 1;
  int maxY = m + 1;
  x = 1, y = 1;
  bool hasChanged = false;
  while (1) {
    if (dir == 1) {
      auto it = lower_bound(R[x].begin(), R[x].end(), y);
      int end = min(maxY, *it);
      long long int dy = end - y - 1;
      if (dy <= 0) {
        if (hasChanged)
          break;
        else
          hasChanged = true;
      } else {
        cnt += dy;
        maxY = end - 1;
        y = end - 1;
      }
    } else if (dir == 2) {
      auto it = lower_bound(C[y].begin(), C[y].end(), x);
      int end = min(maxX, *it);
      long long int dx = end - x - 1;
      if (dx <= 0) {
        break;
      } else {
        cnt += dx;
        maxX = end - 1;
        x = end - 1;
      }
    } else if (dir == 3) {
      auto it = prev(R[x].lower_bound(y));
      long long int end = max(minY, *it);
      int dy = y - end - 1;
      if (dy <= 0) {
        break;
      } else {
        cnt += dy;
        minY = end + 1;
        y = end + 1;
      }
    } else {
      auto it = prev(C[y].lower_bound(x));
      long long int end = max(minX, *it);
      int dx = x - end - 1;
      if (dx <= 0) {
        break;
      } else {
        cnt += dx;
        minX = end + 1;
        x = end + 1;
      }
    }
    dir++;
    hasChanged = true;
    if (dir == 5) dir = 1;
  }
  long long int cnt2 = n * m - k;
  if (cnt == cnt2)
    cout << "Yes";
  else
    cout << "No";
}
