#include <cstdio>
#include <algorithm>

#define Rep(i, n) for (int i = 1; i <= n; i ++)
#define Rep0(i, n) for (int i = 0; i <= n; i ++)
#define RepG(i, x) for (int i = head[x]; i; i = edge[i].next)
#define v edge[i].to

using namespace std;

const int N = 500010;

int dis[N], d[N], f[N];

int main()
{
	int n, q, D;
	scanf("%d%d", &n, &D);
	dis[0] = D;
	Rep(i, n){
		scanf("%d", &d[i]);
		dis[i] = min(dis[i - 1], abs(dis[i - 1] - d[i]));
	}
	f[n + 1] = 0;
	for (int i = n; i; i --) {
		if (d[i] < (f[i + 1] + 1) * 2) f[i] = f[i + 1] + d[i];
		else f[i] = f[i + 1];
	}
	scanf("%d", &q);
	Rep(i, q) {
		int x;
		scanf("%d", &x);
		if (dis[x - 1] > f[x + 1]) printf("YES\n");
		else printf("NO\n");
	}
	
	return 0;
}
