#include <stdio.h>
#include <algorithm>
#define ll long long
#define MAXN 200005
using namespace std;
int read(){
int a1=0,k1=1;char c1=getchar();
while(c1<'0'||c1>'9'){
if(c1=='-')k1=-1;c1=getchar();
}
while(c1>='0'&&c1<='9'){
a1=a1*10+c1-'0';
c1=getchar();
}
return a1*k1;
}
inline void out1(ll n) {
if(n < 0)
putchar ('-') , n = -n;
if(n > 9)
out1(n / 10);
putchar(n % 10 + '0');
}
inline void out(ll n){
out1(n);printf("\n");
}
int magic[MAXN],f[MAXN],qu[MAXN];
int/*signed*/ main(){
freopen("endless.in","r",stdin);
freopen("endless.out","w",stdout);
int n=read(),l=read(),v=read(),q,sb,mx=-1,n1=0;
for(int i=1;i<=n;++i){
magic[i]=read();
}
sort(magic+1,magic+1+n);
q=read();
for(int i=1;i<=q;++i){
qu[i]=read();qu[i]*=v;
mx=qu[i]>mx?qu[i]:mx;
}
// sort(qu+1,qu+1+q);
f[0]=l;
for(int i=1;i<=n;++i){
f[i]=f[i-1]+magic[n-i+1];
if(f[i]>mx){
n1=i;printf("%d\n",i);
break;
}
}
if(!n1)n1=n;
// for(int i=0;i<=n;++i){
// printf("%d ",f[i]);
// }
// printf("\n%d %d\n",n,n1);
for(int i=1;i<=q;++i){
int emm=upper_bound(f,f+n+1,qu[i])-f;
if(emm>n1)emm=-1;
// printf("%d ",qu[i]);
// printf("%d\n",emm!=-1?f[emm]:-1);
printf("%d\n",emm);
}
return 0;
}