/*
PROB: tetetent
LANG: C++
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <numeric>
#include <set>
#include <queue>
#include <map>
#include <stack>
#include <ctime>
#include <cmath>
#include <cstdlib>
#define foreach(a,b) for( typeof((b).begin()) a = (b).begin() ; a != (b).end() ; a++ )
#define eprintf( msg , ... ) fprintf( stderr , "Line %d in %s :: " msg "\n" , __LINE__ , __FUNCTION__ , ##__VA_ARGS__ )

using namespace std;

typedef long long ll;

const char *ANS[] = { "NO" , "YES" };
const int SUB2MAXN = 1 << 10;

int W,H,S,N;

vector< pair<int,int> > loc;

int tree[SUB2MAXN+1][SUB2MAXN+1];
int got[SUB2MAXN][SUB2MAXN];

void update( int x , int y , int val ){
    for( int i = x ; i <= SUB2MAXN ; i += i & -i )
        for( int j = y ; j <= SUB2MAXN ; j += j & -j )
            tree[i][j] += val;
}
int query( int x , int y ){
    int sum = 0;
    for( int i = x ; i > 0 ; i -= i & -i )
        for( int j = y ; j > 0 ; j -= j & -j )
            sum += tree[i][j];
    return sum;
}

int slowsum( int x0 , int y0 , int x1 , int y1 ){
    int sum = 0;
    for( int i = x0 ; i <= x1 ; i++ ){
        for( int j = y0 ; j <= y1 ; j++ ){
            sum += got[i][j];
        }
    }
    return sum;
}

void solveslow(){
    if( S == 1 ){
        printf("%s\n", ANS[1]);
        exit(0);
    }
    
    for( int i = 0 ; i < N ; i++ )
        got[ loc[i].first ][ loc[i].second ] = 1;

    
    for( int x0 = 1 ; x0  + S <= W ; x0++ ){
        for( int y0 = 1 ; y0 + S <= H ; y0++ ){
            int x1 = x0 + S - 2;
            int y1 = y0 + S - 2;
            
            if( slowsum( x0 , y0 , x1 , y1 ) == 0 ){
                ///eprintf(" at (%d,%d) ", x0-1,y0-1);
                printf("%s\n", ANS[1]);
                exit(0);
            }
        }
    }
    
    printf("%s\n", ANS[0]);
}

int slowsum2( int x0 , int y0 , int x1 , int y1 ){
    return query( x1 , y1 ) - query( x1 , y0 - 1 ) - query( x0 - 1 , y1 ) + query( x0 - 1 , y0 - 1 );
}

void solveslow2(){
    if( S == 1 ){
        printf("%s\n", ANS[1]);
        exit(0);
    }
    
    for( int i = 0 ; i < N ; i++ ){
        got[ loc[i].first ][ loc[i].second ] = 1;
        update( loc[i].first + 1 , loc[i].second + 1 , 1 );
    }
    
    for( int x0 = 1 ; x0  + S <= W ; x0++ ){
        for( int y0 = 1 ; y0 + S <= H ; y0++ ){
            int x1 = x0 + S - 2;
            int y1 = y0 + S - 2;
            
            if( slowsum2( x0 + 1 , y0 + 1 , x1 + 1 , y1 + 1 ) == 0 ){
                ///eprintf(" at (%d,%d) ", x0-1,y0-1);
                printf("%s\n", ANS[1]);
                exit(0);
            }
        }
    }
    
    printf("%s\n", ANS[0]);
}

int main(){
	//freopen( "tetetent.in" , "r" , stdin );
	//freopen( "tetetent.out" , "w" , stdout );
	
	scanf("%d %d %d %d", &W, &H, &S, &N);
	
	int sA = 0 , sB = 0;
	
	for( int i = 0 ; i < N ; i++ ){
        int a,b;
        scanf("%d %d", &a, &b);
        eprintf("got at (%d,%d)", a,b);
        loc.push_back( make_pair( a,b ) );
        sA += a;
        sB += b;
	}
	
	if( N <= 200 and W <= 100 and H <= 100 ){
        solveslow();
	}else if( N <= 200000 and W <= 1000 and H <= 1000 ){
        solveslow2();
	}else{
        printf("%s\n", ANS[ ( (W*H*S)^N - sA * sB ) % 2 == 0 ] );
	}
	
	return 0;
}
