#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int N=100010;
int n,R,C,tp,x[N][2],y[N][2],stk[N],vis[N];
struct data{
	int x,y,idx;
	data(){}
	data(int a,int b,int c=0):x(a),y(b),idx(c){}
};
vector<data>v;
bool check(int x,int y){
	return (!x||x==R)||(!y||y==C);
}
int in(data a){
	if(!a.x)
		return 1;
	if(a.y==C)
		return 2;
	if(a.x==R)
		return 3;
	return 4;
}
bool cmp(data a,data b){
	if(!a.x&&!a.y)
		return 1;
	if(!b.x&&!b.y)
		return 0;
	if(!a.x&&!b.x)
		return a.y<b.y;
	if(a.x==R&&b.x==R)
		return a.y>b.y;
	if(!a.y&&!b.y)
		return a.x>b.x;
	if(a.y==C&&b.y==C)
		return a.x<b.x;
	return in(a)<in(b);
}
int main(){
	scanf("%d%d%d",&R,&C,&n);
	for(int i=1;i<=n;i++){
		int x1,y1,x2,y2;
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		if(check(x1,y1)&&check(x2,y2)){
			v.push_back(data(x1,y1,i));
			v.push_back(data(x2,y2,i));
		}
	}
	sort(v.begin(),v.end(),cmp);
	for(auto &i:v){
		if(!vis[i.idx]){
			stk[++tp]=i.idx;
			vis[i.idx]=1;
		}
		else{
			if(stk[tp]==i.idx)
				tp--;
			else{
				puts("NO");
				return 0;
			}
		}
	}
	puts("YES");
	return 0;
}