#include <bits/stdc++.h>   using namespace std;   const long long INFL = 1LL << 60;   const long long INF = 1 << 30;   long long MOD = 1000000007;   vector<long long> dy = {0, 1, 0, -1, 1, 1, -1, -1, 0};   vector<long long> dx = {1, 0, -1, 0, 1, -1, 1, -1, 0};   void pres(double A, long long x = 10) {     cout << fixed << setprecision(x) << A << endl;   }   void BinarySay(long long x, long long y = 60) {     for (long long i = 0; i < (y); i++) cout << (x >> (y - 1 - i) & 1);     cout << endl;   }   long long cnt_bit(long long x) { return __builtin_popcountll(x); }   long long pow_long(long long x, long long k) {     long long res = 1;     while (k > 0) {       if (k % 2) res *= x;       x *= x;       k /= 2;     }     return res;   }   long long pow_mod(long long x, long long k) {     long long res = 1;     while (k > 0) {       if (k % 2) {         res *= x;         res %= MOD;       }       x *= x;       x %= MOD;       k /= 2;     }     return res;   }   long long inverse(long long x) { return pow_mod(x, MOD - 2); };   long long gcd(long long a, long long b) {     if (b == 0) return a;     return gcd(b, a % b);   }   long long lcm(long long x, long long y) { return x / gcd(x, y) * y; };   vector<long long> Row[100010];   vector<long long> Col[100010];   void solve() {     long long N, M, K;     cin >> N >> M >> K;     for (long long i = 0; i < (K); i++) {       long long a, b;       cin >> a >> b;       Row[a].push_back(b);       Col[b].push_back(a);     }     for (long long i = 0; i <= M + 1; i++) {       Row[0].push_back(i);       Col[i].push_back(0);       Row[N + 1].push_back(i);       Col[i].push_back(N + 1);     }     for (long long i = 0; i <= N + 1; i++) {       Col[0].push_back(i);       Row[i].push_back(0);       Col[M + 1].push_back(i);       Row[i].push_back(M + 1);     }     for (long long i = 0; i < (N + 1); i++) {       sort(Row[i].begin(), Row[i].end());       Row[i].erase(unique(Row[i].begin(), Row[i].end()), Row[i].end());     }     for (long long i = 0; i < (M + 1); i++) {       sort(Col[i].begin(), Col[i].end());       Col[i].erase(unique(Col[i].begin(), Col[i].end()), Col[i].end());     }     long long Cnt = 0;     for (long long i = 1; i <= N; i++) {       long long x = *lower_bound(Row[i].begin(), Row[i].end(), 1);       if (x == 1) break;       Cnt++;     }     if (Cnt == N * M - K) {       cout <<  Yes  << endl;       return;     }     long long y = 1, x = 1;     long long dir = 1;     long long cnt = 1;     long long L = 0, R = M + 1, U = 1, D = N + 1;     while (true) {       long long dif = -cnt;       if (dir == 1) {         long long nx = *lower_bound(Row[y].begin(), Row[y].end(), x);         nx = min(nx - 1, R - 1);         cnt += nx - x;         x = nx;         R = x;       }       if (dir == 2) {         long long ny = *lower_bound(Col[x].begin(), Col[x].end(), y);         ny = min(ny - 1, D - 1);         cnt += ny - y;         y = ny;         D = y;       }       if (dir == 3) {         auto itr = lower_bound(Row[y].begin(), Row[y].end(), x);         itr--;         long long nx = *itr;         nx = max(nx + 1, L + 1);         cnt += x - nx;         x = nx;         L = x;       }       if (dir == 4) {         auto itr = lower_bound(Col[x].begin(), Col[x].end(), y);         itr--;         long long ny = *itr;         ny = max(ny + 1, U + 1);         cnt += y - ny;         y = ny;         U = y;       }       dif += cnt;       if (dif == 0) break;       dir++;       if (dir == 5) dir = 1;     }     if (cnt == N * M - K) {       cout <<  Yes  << endl;     } else {       cout <<  No  << endl;     }   }   int main() {     cin.tie(0);     ios::sync_with_stdio(false);     solve();   }