#include <cstdio>
#include <algorithm>

using namespace std;

struct data
{
    int x,y;
};

data input[2048];

bool a[4096][4096];

int xs[4096],xx[4096],ys[4096],yy[4096];

inline int findy(const int &t)
{
    int l=1,r=yy[0],m;
    while ( l <= r )
    {
        m = (l+r)/2;
        if ( yy[m] == t ) return m;
        if ( t < yy[m] ) r = m - 1;
        else l = m + 1;
    }
}

inline int findx(const int &t)
{
    int l=1,r=xx[0],m;
    while ( l <= r )
    {
        m = (l+r)/2;
        if ( xx[m] == t ) return m;
        if ( t < xx[m] ) r = m - 1;
        else l = m + 1;
    }
}

int main()
{
    int w,h,s,n,x,y,x1,y1,i;
    scanf ("%d%d%d%d",&w,&h,&s,&n);
    if ( s == 1 )
    {
        printf ("YES\n");
        return 0;
    }
        if ( w <= 1000 && h <= 1000 )
        {
            s-=2;
            for ( i=1; i<=n; i++ )
            {
                scanf ("%d%d",&x,&y);
                a[x-1][y-1] = 1;
            }

            int last;

            for ( y=0; y<=h; y++ )
            {
                last = -1;
                for ( x=w; x>=0; x-- )
                {
                    if ( a[x][y] ) last = x;
                    if ( last != -1 && last-s <= x ) a[x][y] = 1;
                }
            }

            for ( x=0; x<=w; x++ )
            {
                last = -1;
                for ( y=h; y>=0; y-- )
                {
                    if ( a[x][y] ) last = y;
                    if ( last != -1 && last-s <= y ) a[x][y] = 1;
                }
            }

            for ( x=0; x+s+2<=w; x++ )
                for ( y=0; y+s+2<=h; y++ )
                    if ( !a[x][y] )
                    {
                        printf ("YES\n");
                        return 0;
                    }
            printf ("NO\n");
        }
        else
        {
            for ( i=1; i<=n; i++ )
            {
                scanf ("%d%d",&input[i].x,&input[i].y);
                xs[2*(i-1)+1] = input[i].x-1;
                ys[2*(i-1)+1] = input[i].y-1;
                xs[2*(i-1)+2] = input[i].x-s;
                ys[2*(i-1)+2] = input[i].y-s;
            }

            xs[2*n+1] = 0;
            ys[2*n+1] = 0;
            xs[2*n+2] = w-s;
            ys[2*n+2] = h-s;

            sort (xs+1,xs+2*n+3);
            sort (ys+1,ys+2*n+3);

            xs[0] = -7; ys[0] = -7;
            for ( i=1; i<=2*n+2; i++ )
            {
                if ( xs[i] != xs[i-1] && xs[i] >= 0 )
                {
                    xx[0]++;
                    xx[ xx[0] ] = xs[i];
                }
                if ( ys[i] != ys[i-1] && ys[i] >= 0 )
                {
                    yy[0]++;
                    yy[ yy[0] ] = ys[i];
                }
            }

            for ( i=1; i<=n; i++ )
            {
                x1 = findx ( input[i].x-1 );
                y1 = findy ( input[i].y-1 );
                a[x1][y1] = 1;
            }

            int wn = xx[0],hn = yy[0],last;

            //for ( i=1; i<=wn; i++ ) printf ("%d\n",xx[i]);

            for ( y=1; y<=hn; y++ )
            {
                last = -1;
                for ( x=wn; x>=1; x-- )
                {
                    if ( a[x][y] ) last = x;
                    if ( last != -1 && xx[last]-s+2 <= xx[x] ) a[x][y] = 1;
                }
            }

            for ( x=1; x<=wn; x++ )
            {
                last = -1;
                for ( y=hn; y>=1; y-- )
                {
                    if ( a[x][y] ) last = y;
                    if ( last != -1 && xx[last]-s+2 <= yy[y] ) a[x][y] = 1;
                }
            }

            //printf ("_-_%d\n",a[2][2]);

            for ( x=1; x<=wn; x++ )
                for ( y=1; y<=hn; y++ )
                    if ( !a[x][y] && xx[x] <= w - s && yy[y] <= h - s )
                    {
                        printf ("YES\n");
                        return 0;
                    }
            printf ("NO\n");
        }
}
