#include<bits/stdc++.h>
#define nb 1000010
using namespace std;

int n, cnt, q, s, d, a[nb], id[nb], fa[nb], minn[nb];
vector<vector<int>> G;
vector<vector<pair<int, int>>> H;
set<int> S;

bool merge(int x, int y){
	x = fa[x], y = fa[y];
	if(x == y) return 0;
	if(G[y].size() > G[x].size()) swap(x, y);
	for(int v: G[y]){
		fa[v] = x;
		G[x].push_back(v);
	}
	G[y].clear();
	return 1;
}

void DFS(int u, int f, int k){
	minn[u] = k;
	for(auto v: H[u]){
		if(v.first != f) DFS(v.first, u, max(minn[u], v.second));
	}
}

int main(){
	ios::sync_with_stdio(0); 
	cin >> n >> q >> s >> d, cnt = n;
	for(int i = 1; i <= n; i++){
		cin >> a[i], id[a[i]] = i;
		S.insert(a[i]);
	}
	G.resize(n + 1), H.resize(n + 1);
	for(int i = 1; i <= n; i++){
		G[i] = vector<int>(1, i), fa[i] = i;
	}
	while(cnt > 1){
		vector<pair<int, pair<int, int>>> e;
		for(auto &U: G){
			if(U.empty()) continue;
			pair<int, pair<int, int>> E = make_pair(1e9, make_pair(-1, -1));
			for(int u: U) S.erase(a[u]);
			for(int u: U){
				for(int dx: {-d, d}){
					auto it = S.lower_bound(a[u] + dx);
					if(it != S.end()){
						int v = id[*it];
						pair<int, pair<int, int>> E_ = make_pair(abs(d - abs(a[u] - *it)), make_pair(id[a[u]], v));
						E = min(E, E_);
					}
					if(it != S.begin()){
						--it;
						int v = id[*it];
						pair<int, pair<int, int>> E_ = make_pair(abs(d - abs(a[u] - *it)), make_pair(id[a[u]], v));
						E = min(E, E_);
					}
				}
			}
			for(int u: U) S.insert(a[u]);
			e.push_back(E);
		}
		for(auto E: e){
			if(merge(E.second.first, E.second.second)){
				H[E.second.first].push_back(make_pair(E.second.second, E.first));
				H[E.second.second].push_back(make_pair(E.second.first, E.first));
				--cnt;
			}
		}
	}
	DFS(s, -1, 0);
	while(q--){
		int i, k;
		cin >> i >> k;
		cout << (minn[i] <= k ? "Yes\n" : "No\n");
	}
	return 0;
}