#include <iostream>
#include <stdio.h>
#include <stack>

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;


int main () {
    //freopen ("tetent.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);
        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));
            }
        /*    if (j == 5) {*/
              //  cout << "!" << j << " " << i << " " << r[i][j] << endl;
               // for (int i = 0; i < d.size(); i++)
                //    cout << d[i].first << " ";
               // cout << endl;
                //if (!d.empty()) cout <<  r[i][j] << " " << i - (d.back()).second;
               // cout << endl;
            /*}*///
            d.push_back ( make_pair (r[i][j], i));
        }
    }
    if (maxS >= S) ans = 1;
   //cout << maxS << endl;
    printf (ans ? "YES\n" : "NO\n");
}
