#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
const int inf = 1e9 + 7;
int n, m, k;
pair<int, int> p[N];
map<int, vector<int> > r, c;
map<int, bool> mp[N];
set<int> R, C;
int main() {
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++) {
    scanf("%d%d", &p[i].first, &p[i].second);
    mp[p[i].first][p[i].second] = 1;
    r[p[i].first].push_back(p[i].second);
    c[p[i].second].push_back(p[i].first);
    R.insert(p[i].first);
    C.insert(p[i].second);
  }
  for (auto i : R) {
    r[i].push_back(0);
    sort(r[i].begin(), r[i].end());
    r[i].push_back(m + 1);
  }
  for (auto i : C) {
    c[i].push_back(0);
    sort(c[i].begin(), c[i].end());
    c[i].push_back(n + 1);
  }
  int x = 1, y = 1, X = n, Y = m, cc = 1, rr = 1, d = 1;
  vector<int> v;
  while (1) {
    if (x >= X && y >= Y) break;
    if (d == 1) {
      v.swap(r[rr]);
      if ((int)v.size() == 0) {
        v.push_back(0);
        v.push_back(m + 1);
      }
      int j = upper_bound(v.begin(), v.end(), cc) - v.begin();
      int vv = min(v[j], Y + 1);
      for (int i = vv; i <= Y; i++) {
        for (int l = rr; l <= X; l++) {
          if (mp[l][i] == 0) {
            puts("No");
            return 0;
          }
        }
      }
      x++;
      rr++;
      Y = vv - 1;
      cc = vv - 1;
      d = 2;
      v.swap(r[rr - 1]);
    } else if (d == 2) {
      v.swap(c[cc]);
      if ((int)v.size() == 0) {
        v.push_back(0);
        v.push_back(n + 1);
      }
      int j = upper_bound(v.begin(), v.end(), rr) - v.begin();
      int vv = min(v[j], X + 1);
      for (int i = vv; i <= X; i++) {
        for (int l = y; l <= cc; l++) {
          if (mp[i][l] == 0) {
            puts("No");
            return 0;
          }
        }
      }
      Y--;
      cc--;
      X = vv - 1;
      rr = vv - 1;
      d = 3;
      v.swap(c[cc + 1]);
    } else if (d == 3) {
      v.swap(r[rr]);
      if ((int)v.size() == 0) {
        v.push_back(0);
        v.push_back(m + 1);
      }
      int j = upper_bound(v.begin(), v.end(), cc) - v.begin() - 1;
      int vv = max(v[j], y - 1);
      for (int i = y; i <= vv; i++) {
        for (int l = x; l <= rr; l++) {
          if (mp[l][i] == 0) {
            puts("No");
            return 0;
          }
        }
      }
      X--;
      rr--;
      y = vv + 1;
      cc = vv + 1;
      d = 4;
      v.swap(r[rr + 1]);
    } else if (d == 4) {
      v.swap(c[cc]);
      if ((int)v.size() == 0) {
        v.push_back(0);
        v.push_back(n + 1);
      }
      int j = upper_bound(v.begin(), v.end(), rr) - v.begin() - 1;
      int vv = max(v[j], x - 1);
      for (int i = x; i <= vv; i++) {
        for (int l = cc; l <= Y; l++) {
          if (mp[i][l] == 0) {
            puts("No");
            return 0;
          }
        }
      }
      y++;
      cc++;
      x = vv + 1;
      rr = vv + 1;
      d = 1;
      v.swap(c[cc - 1]);
    }
  }
  puts("Yes");
}
