#include <bits/stdc++.h>
using namespace std;
const int maxsize = 100005;
const int inf = 1061109567;
int n, m, k;
vector<int> ver[maxsize];
vector<int> hor[maxsize];
int main() {
  scanf("%d%d%d", &n, &m, &k);
  for (int i = 0, x, y; i < k; i++) {
    scanf("%d%d", &x, &y);
    ver[y].push_back(x);
    hor[x].push_back(y);
  }
  for (int i = 1; i <= n; i++) {
    hor[i].push_back(0);
    hor[i].push_back(m + 1);
    sort(hor[i].begin(), hor[i].end());
  }
  for (int i = 1; i <= m; i++) {
    ver[i].push_back(0);
    ver[i].push_back(n + 1);
    sort(ver[i].begin(), ver[i].end());
  }
  int posx = 1, posy = 1, dir = 1;
  long long int sum = 1;
  int up = 0, down = n + 1, left = 0, right = m + 1;
  while (1) {
    if (dir == 1) {
      auto v = lower_bound(hor[posx].begin(), hor[posx].end(), posy) -
               hor[posx].begin();
      int ori = posy;
      posy = min(hor[posx][v], right) - 1;
      if (posy == ori) {
        if (posy != 1) break;
      }
      sum += posy - ori;
      up = posx;
      dir = 2;
    } else if (dir == 2) {
      auto v = lower_bound(ver[posy].begin(), ver[posy].end(), posx) -
               ver[posy].begin();
      int ori = posx;
      posx = min(ver[posy][v], down) - 1;
      if (posx == ori) break;
      sum += posx - ori;
      right = posy;
      dir = 3;
    } else if (dir == 3) {
      auto v = lower_bound(hor[posx].begin(), hor[posx].end(), posy) -
               hor[posx].begin();
      --v;
      int ori = posy;
      posy = max(left, hor[posx][v]) + 1;
      if (posy == ori) break;
      sum += ori - posy;
      down = posx;
      dir = 4;
    } else if (dir == 4) {
      auto v = lower_bound(ver[posy].begin(), ver[posy].end(), posx) -
               ver[posy].begin();
      --v;
      int ori = posx;
      posx = max(up, ver[posy][v]) + 1;
      if (ori == posx) break;
      sum += ori - posx;
      left = posy;
      dir = 1;
    }
  }
  if (sum == 1LL * n * m - k)
    puts("Yes");
  else
    puts("No");
  return 0;
}
