#include <bits/stdc++.h>
using namespace std;
vector<int> pa[(100010)], pb[(100010)];
struct Point {
  int x, y;
  bool operator<(const Point& o) const {
    if (x != o.x) return x < o.x;
    return y < o.y;
  }
};
set<Point> st;
int main() {
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = 0, x, y; i < k; i++) {
    scanf("%d%d", &x, &y);
    pa[x].push_back(y);
    pb[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    sort(pa[i].begin(), pa[i].end());
  }
  for (int i = 1; i <= m; i++) {
    sort(pb[i].begin(), pb[i].end());
  }
  long long int cnt = 1;
  int quit = 0;
  int x = 1, y = 1, dir = 0;
  int e[4];
  e[0] = m;
  e[1] = n;
  e[2] = 1;
  e[3] = 1;
  int l, r, is, px, py, w;
  while (!quit) {
    switch (dir) {
      case 0:
        l = 0, r = pa[x].size() - 1, is = -1;
        px = x, py = y;
        while (l <= r) {
          int k = (l + r) >> 1;
          if (pa[x][k] < y) {
            l = k + 1;
          } else {
            is = k;
            r = k - 1;
          }
        }
        if (is == -1)
          y = e[0];
        else
          y = min(e[0], pa[x][is] - 1);
        w = abs(py - y);
        cnt += w;
        e[3] = max(e[3], x + 1);
        dir = 1;
        break;
      case 1:
        l = 0, r = pb[y].size() - 1, is = -1;
        px = x, py = y;
        while (l <= r) {
          int k = (l + r) >> 1;
          if (pb[y][k] < x) {
            l = k + 1;
          } else {
            is = k;
            r = k - 1;
          }
        }
        if (is == -1)
          x = e[1];
        else
          x = min(e[1], pb[y][is] - 1);
        w = abs(px - x);
        cnt += w;
        e[0] = min(e[0], y - 1);
        dir = 2;
        break;
      case 2:
        l = 0, r = pa[x].size() - 1, is = -1;
        px = x, py = y;
        while (l <= r) {
          int k = (l + r) >> 1;
          if (pa[x][k] > y) {
            r = k - 1;
          } else {
            is = k;
            l = k + 1;
          }
        }
        if (is == -1)
          y = e[2];
        else
          y = max(e[2], pa[x][is] + 1);
        w = abs(py - y);
        cnt += w;
        e[1] = min(e[1], x - 1);
        dir = 3;
        break;
      case 3:
        l = 0, r = pb[y].size() - 1, is = -1;
        px = x, py = y;
        while (l <= r) {
          int k = (l + r) >> 1;
          if (pb[y][k] > x) {
            r = k - 1;
          } else {
            is = k;
            l = k + 1;
          }
        }
        if (is == -1)
          x = e[3];
        else
          x = max(e[3], pb[y][is] + 1);
        w = abs(px - x);
        cnt += w;
        e[2] = max(e[2], y + 1);
        dir = 0;
        break;
    }
    if (st.find((Point){x, y}) != st.end()) {
      quit = 1;
    } else {
      st.insert((Point){x, y});
    }
  }
  bool ok = false;
  long long int sum = (long long int)n * m;
  if (sum - k == cnt) {
    ok = true;
  }
  printf("%s\n", ok ? "Yes" : "No");
  return 0;
}
