#include <set>
#include <cstdio>
#include <algorithm>
using namespace std;

const int MAXN = 1 << 18;

struct el {
	int x , y;
	
	void read() {
		scanf ( "%d%d" , &x , &y );
	}
};

int w , h , s;
int n;
el a[MAXN];

multiset < int > st;
multiset < int >::iterator it , it2;

void read() {
	int i;
	
	scanf ( "%d%d%d" , &w , &h , &s );
	scanf ( "%d" , &n );
	for (i = 1; i <= n; i++)
		a[i].read();
}

int cmp ( el a , el b ) {
	return a.x < b.x;
}

int solve() {
	int r = 0;
	int i;
	
	++ n;
	a[n].x = a[n].y = 0;
	
	sort ( a + 1 , a + n + 1 , cmp );
	
	st.insert ( 0 );
	st.insert ( h );
	
	for (i = 1; i <= n; i++) {
		if ( a[i].x >= s )
			break;
		
		st.insert ( a[i].y );
		r = i;
	}
	
	for (it = st.begin() , it2 = it , ++ it2; it2 != st.end(); it ++ , it2 ++)
		if ( (*it2) - (*it) >= s )
			return 1;
		
	for (i = 1; i <= n; i++) {
		while ( r < n && a[r + 1].x - a[i].x < s ) {
			++ r;
			st.insert ( a[r].y );
		}
		
		if ( a[i].x + s > w )
			break;
		
		it = st.lower_bound ( a[i].y );
		it2 = it;
		
		++ it2;
		
		st.erase ( it );
		
		it = it2;
		-- it;
		
		if ( (*it2) - (*it) >= s )
			return 1;
	}
	
	return 0;
}

int main() {
	read();
	printf ( "%s\n" , solve() ? "YES" : "NO" );
	
	return 0;
}
