#include <bits/stdc++.h>
using namespace std;
const long double PI = 3.14159265358979323846264338328;
const long long mx64 = 9223372036854775807;
const int mx32 = 2147483647;
const short int mx16 = 32767;
const long long mod_1 = 1000000007;
const long long mod_2 = 998244353;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout.precision(25);
  long long n, m, k;
  cin >> n >> m >> k;
  vector<set<int>> ks_I(n + 1);
  vector<set<int>> ks_J(m + 1);
  for (int v = 0; v < k; v++) {
    int I, J;
    cin >> I >> J;
    ks_I[I].insert(J);
    ks_J[J].insert(I);
  }
  long long all = n * m;
  long long we = 0;
  int I = 1, J = 1;
  pair<int, int> NOW = {1, 0};
  int c = 0;
  bool FIRST = true;
  while (true) {
    bool move = FIRST;
    if (c % 4 == 0) {
      if (ks_I[NOW.first].size()) {
        set<int>::iterator tr = ks_I[NOW.first].lower_bound(NOW.second);
        if (tr != ks_I[NOW.first].end() && *tr <= m) {
          m = *tr - 1;
        }
      }
      we += m - NOW.second;
      if (m - NOW.second > 0) {
        move = true;
      }
      J = NOW.second + 1;
      NOW.second = m;
    } else if (c % 4 == 1) {
      if (ks_J[NOW.second].size()) {
        set<int>::iterator tr = ks_J[NOW.second].lower_bound(NOW.first);
        if (tr != ks_J[NOW.second].end() && *tr <= n) {
          n = *tr - 1;
        }
      }
      we += n - NOW.first;
      if (n - NOW.first > 0) {
        move = true;
      }
      I = NOW.first + 1;
      NOW.first = n;
    } else if (c % 4 == 2) {
      if (ks_I[NOW.first].size()) {
        set<int>::iterator tr = ks_I[NOW.first].lower_bound(NOW.second);
        tr--;
        if (tr != ks_I[NOW.first].end() && *tr >= J && *tr <= NOW.second) {
          J = *tr + 1;
        }
      }
      we += NOW.second - J;
      if (NOW.second - J > 0) {
        move = true;
      }
      m = NOW.second - 1;
      NOW.second = J;
    } else if (c % 4 == 3) {
      if (ks_J[NOW.second].size()) {
        set<int>::iterator tr = ks_J[NOW.second].lower_bound(NOW.first);
        tr--;
        if (tr != ks_J[NOW.second].end() && *tr >= I && *tr <= NOW.first) {
          I = *tr + 1;
        }
      }
      we += NOW.first - I;
      if (NOW.first - I > 0) {
        move = true;
      }
      n = NOW.first - 1;
      NOW.first = I;
    }
    c = (c + 1) % 4;
    if (!move) {
      break;
    }
    FIRST = false;
  }
  if (all - we == k) {
    cout << "Yes";
  } else {
    cout << "No";
  }
  return 0;
}
