#include <iostream>
#include <stdio.h>
#include <stack>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

int H, W, S, N, x, y;

multiset < pair <int, int> > s;

vector < pair <int, int> > v;


int main () {
    //freopen ("tetent2.in", "r", stdin);

    scanf ("%d%d%d", &W, &H, &S);
    scanf ("%d", &N);

    for (int i =0 ; i < N; i++) {
        scanf ("%d%d", &x, &y);
        v.push_back (make_pair (x, y));
    }
    v.push_back (make_pair (W, H));
    N++;
    sort (v.begin(), v.end());

    s.insert (make_pair (0, -1)), s.insert (make_pair (H, -1));

    multiset < pair <int, int> > ::iterator iter, iter2;

    int l = 0;
    int maxS = 1;

    for (int i = 0; i < N; i++) {
       // printf ("Insert (%d; %d)\n", v[i].first, v[i].second);

        while (v[i].first - v[l].first >= S) {
           // printf ("Delete (%d; %d)\n", v[l].first, v[l].second);
            iter = s.lower_bound ( make_pair (v[l].second, v[l].first) );
            iter2 = iter;
            iter2--;
            iter++;

           // printf ("Calc dist (%d; %d) -> (%d; %d) = %d\n", iter2->second, iter2->first, iter->second, iter->first, iter->first - iter2->first);

            s.erase (make_pair (v[l].second, v[l].first));
            l++;

            if (iter2->second != -1 and v[i].first - iter2->second >= S) continue;
            if (iter->second != -1 and v[i].first - iter->second >= S) continue;

            maxS = max (maxS, iter->first - iter2->first);
        }

        s.insert ( make_pair (v[i].second, v[i].first) );
    }
   // cout << maxS << endl;
    if (maxS >= S)
        printf ("YES\n");
    else
        printf ("NO\n");
}
