//int r,c,n;
//int index(){
//    int x, y;
//    cin >> x >> y;
//    if(x != 0 && x != r && y != 0 && y != c)
//        return -1;
//    if(y == 0)
//        return x;
//    if(x == r)
//        return r+y;
//    if(y == c)
//        return r+c+(r-x);
//    return r+c+r+(c-y);
//
//}
//string _(){
//    cin >> r >> c >> n;
//    vpii arr;
//    vi coords;
//    rep(i,0,n-1){
//        int u = index(), v = index();
//        if(u != -1 && v != -1){
//            arr.pb({u,v});
//            coords.pb(u);
//            coords.pb(v);
//        }
//    }
//    unique(coords);
//    n = sz(arr);
//    for(auto &_ : arr){
//        _.X = lower_bound(all(coords),_.X)-coords.begin();
//        _.Y = lower_bound(all(coords),_.Y)-coords.begin();
//        if(_.X > _.Y)
//            swap(_.X,_.Y);
//        assert(_.X < _.Y);
//    }
//    vl psum(sz(coords));
//    for(auto _ : arr){
//        ll key = randll()%(ll(2e13));
//        psum[_.X] += key;
//        psum[_.Y] -= key;
//    }
//    rep(i,1,sz(coords)-1)
//        psum[i] += psum[i-1];
//    for(auto _ : arr){
//        if(psum[_.Y-1]-psum[_.X] != 0)
//            return "NO";
//    }
//    return "YES";
//}
//
#include <iomanip>
#include <algorithm>
#include <cassert>
#include <vector>
#include <utility>
#include <iostream>
#include <string>
#define pb push_back
#define REP_INT(i,l,r) for(int i = l; i <= r; ++i)
#define GET_REP_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define rep(...) GET_REP_MACRO(__VA_ARGS__,REP_ANY,REP_INT)(__VA_ARGS__)
#define all(v) (v).begin(), (v).end()
#define sz(v) ll(v.size())
#define X first
#define Y second
#define T1 template<typename T> static
using namespace std;
typedef long long ll;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
T1 ostream& operator<<(ostream& stream, const vector<T>& t);
T1 vector<T> unique(vector<T>& arr){
    sort(all(arr));
    arr.erase(unique(all(arr)), arr.end());
    return arr;
}
ll randll(){
    return ((ll(rand()) << 48) | (ll(rand()) << 32) | (ll(rand()) << 16) | (ll(rand())));
}
T1 istream& read(T, T, istream& = cin);
int r,c,n;
int index(){
    int x, y;
    cin >> x >> y;
    if(x != 0 && x != r && y != 0 && y != c)
        return -1;
    if(y == 0)
        return x;
    if(x == r)
        return r+y;
    if(y == c)
        return r+c+(r-x);
    return r+c+r+(c-y);
}
string _(){
    cin >> r >> c >> n;
    vpii arr;
    vi coords;
    rep(i,0,n-1){
        int u = index(), v = index();
        if(u != -1 && v != -1){
            arr.pb({u,v});
            coords.pb(u);
            coords.pb(v);
        }
    }
    unique(coords);
    n = sz(arr);
    for(auto &_ : arr){
        _.X = lower_bound(all(coords),_.X)-coords.begin();
        _.Y = lower_bound(all(coords),_.Y)-coords.begin();
        if(_.X > _.Y)
            swap(_.X,_.Y);
        assert(_.X < _.Y);
    }
    vl psum(sz(coords));
    for(auto _ : arr){
        ll key = randll()%(ll(2e13));
        psum[_.X] += key;
        psum[_.Y] -= key;
    }
    rep(i,1,sz(coords)-1)
        psum[i] += psum[i-1];
    for(auto _ : arr){
        if(psum[_.Y-1]-psum[_.X] != 0)
            return "NO";
    }
    return "YES";
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
        cout << _() << '\n';
}


Measured memory_bytes: 3572