#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <set>
#include <array>
#include <cstdio>
#define endl '\n'
#define LL long long
#define pb push_back
#define mp make_pair
#define INF 0x3f3f3f3f
#define Inf 1000000000000000000LL
#define F first
#define S second
using namespace std;
typedef pair<int,int>pii;
int n,q,s,d;
int main(){
	cin>>n>>q>>s>>d;
	vector<int>a(n);
	set<pii>st;
	for(int i=0;i<n;i++){
		cin>>a[i];
		st.emplace(a[i],i);
	}
	vector<int>dist(n,INF);
	dist[--s]=0;
	set<array<int,3>>pq{{0,s,-1}};
	auto relax=[&](int v){
		if(v==-1)return;
		for(int x:{a[v]-d,a[v]+d}){
			auto relax=[&](int u){
				int new_d=max(dist[v],abs(a[u]-x));
				dist[u]=min(dist[u],new_d);
				pq.insert({new_d,u,v});
			};
			auto it=st.lower_bound({x,-1});
			if(it!=st.end())relax(it->S);
			if(it!=st.begin())relax((--it)->S);
		}
	};

	while(!pq.empty()){
		auto [cur_d,v,from]=*pq.begin();
		pq.erase(pq.begin());
		st.erase({a[v],v});
		relax(from);
		if(cur_d==dist[v])relax(v);
	}
	while(q--){
		int i,k;
		cin>>i>>k;
		puts(dist[--i]<=k?"Yes":"No");
	}
	return 0;
}
