#include <bits/stdc++.h>
const int Maxn = 1e5;
using namespace std;
int n, m, k;
set<int> col[Maxn + 10], row[Maxn + 10];
bool del(int up, int down, int left, int right) {
  for (int i = up; i <= down; i++)
    for (int j = left; j <= right; j++) {
      if (row[i].find(j) == row[i].end()) return false;
      row[i].erase(j);
      col[j].erase(i);
      --k;
    }
  return true;
}
int main() {
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 1, x, y; i <= k; i++) {
    scanf("%d %d", &x, &y);
    col[y].insert(x);
    row[x].insert(y);
  }
  int dir = 0;
  int up = 1, down = n, left = 1, right = m;
  int D = 0, x = 1, y = 1;
  while (k) {
    if (dir == 0) {
      auto it = row[x].begin();
      if (it == row[x].end())
        y = right;
      else {
        int p = *it;
        if (!del(up, down, p, right)) {
          puts("No");
          return 0;
        }
        right = y = p - 1;
      }
      left += D;
    } else if (dir == 1) {
      auto it = col[y].begin();
      if (it == col[y].end())
        x = down;
      else {
        int p = *it;
        if (!del(p, down, left, right)) {
          puts("No");
          return 0;
        }
        down = x = p - 1;
      }
      up += D;
    } else if (dir == 2) {
      auto it = row[x].rbegin();
      if (it == row[x].rend())
        y = left;
      else {
        int p = *it;
        if (!del(up, down, left, p)) {
          puts("No");
          return 0;
        }
        left = y = p + 1;
      }
      right -= D;
    } else {
      auto it = col[y].rbegin();
      if (it == col[y].rend())
        x = up;
      else {
        int p = *it;
        if (!del(up, p, left, right)) {
          puts("No");
          return 0;
        }
        up = x = p + 1;
      }
      down -= D;
    }
    dir = (dir + 1) % 4;
    D = 1;
  }
  puts("Yes");
  return 0;
}
