#include <bits/stdc++.h>
using namespace std;
const long long N = 1e5 + 5;
vector<long long> row[N], col[N];
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  long long n, m, k;
  cin >> n >> m >> k;
  for (long long i = 0; i < k; i++) {
    long long x, y;
    cin >> x >> y;
    x--;
    y--;
    row[x].push_back(y);
    col[y].push_back(x);
  }
  for (long long i = 0; i < N; i++) {
    sort(row[i].begin(), row[i].end());
    sort(col[i].begin(), col[i].end());
  }
  auto find_go = [&](vector<long long> &v, long long posx, long long posy) {
    if (posx < posy) {
      if (v.empty()) {
        long long go = posx;
        for (long long i = posx + 1; i < posy; i++) {
          if (v.empty()) return posy - 1;
          bool cango = true;
          auto x = lower_bound(v.begin(), v.end(), i);
          if (x != v.end() && *x == i) cango = false;
          if (cango) {
            go = i;
          } else
            break;
        }
        return go;
      } else {
        auto it = lower_bound(v.begin(), v.end(), posx);
        if (it == v.end()) return posy - 1;
        return min(*it - 1, posy - 1);
      }
    } else {
      if (v.empty()) {
        long long go = posx;
        for (long long i = posx - 1; i > posy; i--) {
          if (v.empty()) return posy + 1;
          bool cango = true;
          auto x = lower_bound(v.begin(), v.end(), i);
          if (x != v.end() && *x == i) break;
          if (cango) {
            go = i;
          } else
            break;
        }
        return go;
      } else {
        auto it = lower_bound(v.begin(), v.end(), posx);
        if (it == v.begin()) return posy + 1;
        if (it != v.begin()) it--;
        return max(*it + 1, posy + 1);
      }
    }
    return posx;
  };
  long long count = 1;
  pair<long long, long long> pos = make_pair(0, 0);
  long long dir = 0;
  long long last[] = {m, n, -1, -1};
  bool f = false;
  while (true && count < n * m - k) {
    if (dir == 0) {
      long long x = find_go(row[pos.first], pos.second, last[dir]);
      if (x == pos.second) {
        if (f) break;
        dir = 1;
        continue;
      }
      last[3] = pos.first;
      count += abs(x - pos.second);
      pos = make_pair(pos.first, x);
      dir = 1;
    } else if (dir == 1) {
      long long x = find_go(col[pos.second], pos.first, last[dir]);
      if (x == pos.first) {
        if (f) break;
        dir = 2;
        continue;
      }
      last[0] = pos.second;
      count += abs(x - pos.first);
      pos = make_pair(x, pos.second);
      dir = 2;
    } else if (dir == 2) {
      long long x = find_go(row[pos.first], pos.second, last[dir]);
      if (x == pos.second) {
        if (f) break;
        dir = 3;
        continue;
      }
      last[1] = pos.first;
      count += abs(x - pos.second);
      pos = make_pair(pos.first, x);
      dir = 3;
    } else {
      long long x = find_go(col[pos.second], pos.first, last[dir]);
      if (x == pos.first) {
        if (f) break;
        dir = 0;
        continue;
      }
      last[2] = pos.second;
      count += abs(x - pos.first);
      pos = make_pair(x, pos.second);
      dir = 0;
    }
    f = true;
  }
  if (count == n * m - k)
    cout << "Yes";
  else {
    cout << "No";
  }
  return 0;
}
