#include <bits/stdc++.h>
using namespace std;
#define int long long
set<int> occupi[100100];
set<int> occupj[100100];
int nxt(set<int> &st, int v) {
return *st.upper_bound(v);
}
int prv(set<int> &st, int v) {
auto p = st.lower_bound(v);
--p;
return *p;
}
int32_t main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int n, m, k;
cin >> n >> m >> k;
for(int i=1;i<=n;i++) occupi[i].insert(0), occupi[i].insert(m+1);
for(int j=1;j<=m;j++) occupj[j].insert(0), occupj[j].insert(n+1);
int rem=n*m-k-1;
while(k--) {
int i, j;
cin >> i >> j;
occupi[i].insert(j);
occupj[j].insert(i);
}
int i=1, j=1;
int up=1, down=n, left=1, right=m;
int d=0;
int mx=0;
while(true) {
if(!d) {
int nj=min(nxt(occupi[i], j)-1, right);
if(mx&&nj<=j) break;
rem-=nj-j;
j=nj;
up=i+1;
} else if(d==1) {
int ni=min(nxt(occupj[j], i)-1, down);
if(ni<=i) break;
rem-=ni-i;
i=ni;
right=j-1;
} else if(d==2) {
int nj=max(prv(occupi[i], j)+1, left);
if(nj>=j) break;
rem-=j-nj;
j=nj;
down=i-1;
} else {
int ni=max(prv(occupj[j], i)+1, up);
if(ni>=i) break;
rem-=i-ni;
i=ni;
left=j+1;
}
++d;
d%=4;
mx=max(mx, d);
}
if(rem) {
cout << "No\n";
} else {
cout << "Yes\n";
}
return 0;
}