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

using namespace std;

int H, W, S, N, x, y;
bool a[1024][1024];
int r[1024][1024];

deque <pair <int, int> > d;
stack <pair <int, int> > iter;

multiset < int> s;

vector < pair <int, int> > v;

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

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

    if (H <= 1000 and W <= 1000) {
        for (int i =0 ; i < N; i++) {
            scanf ("%d%d", &x, &y);
            a[y][x] = 1;
        }
        for (int i = 0; i <= H; i++) {

            for (int j = 1; j <= W; j++) {
                if (a[i][j - 1] == 1)
                    r[i][j] = 1;
                else
                    r[i][j] = r[i][j - 1] + 1;
                //cout << r[i][j] << " ";
            } //cout << endl;
        }

        bool ans = 0;
        int maxS = 0;

        for (int j = 0; j <= W; j++) {
            d.clear();
            for (int i = 0; i <= H; i++) {
                while (!d.empty ()) {
                    if (d.back().first >= r[i][j])
                        d.pop_back();
                    else break;
                }

                if (!d.empty()) {
                        maxS = max (maxS,
                                    min ( r[i][j], i - (d.back()).second ) );
                } else {
                        maxS = max (maxS, min (r[i][j], i));
                }
                d.push_back ( make_pair (r[i][j], i));
            }
        }
        if (maxS >= S) ans = 1;
       //cout << maxS << endl;
        printf (ans ? "YES\n" : "NO\n");
    } else {
        for (int i =0 ; i < N; i++) {
            scanf ("%d%d", &x, &y);
            v.push_back (make_pair (x, y));
        }
        sort (v.begin(), v.end());

        s.insert (0), s.insert (H);

         set < int>::iterator iter, iter2;

        int l = 0;
        for (int i = 0; i < N; i++) {
            s.insert (v[i].second);

            while (v[i].first - v[l].first > S) {
                s.erase (v[l].second);
                l++;
            }

            for (iter = s.begin(), iter2; iter != s.end(); iter++) {
                iter2 = iter;
                iter2++;
                if (*iter2 -*iter >= S){
                    //cout << *iter2 -*iter << endl;
                     printf ("YES\n");
                     return 0;
                }
            }
        }
        printf ("NO\n");
    }
}
