#include <bits/stdc++.h>
using namespace std;
long long a, b, c, d, e, f, h, i, j, k;
long long G[300005], H[300005];
long long B[300005];
long long len[300005];
long long g, r, T;
set<pair<long long, long long> > GG;
set<pair<long long, long long> >::iterator in[10];
long long Mod(long long x) {
  if (x < 0) x += (1 + (-x) / T) * T;
  return x % T;
}
void Make_G(long long ll, long long rr, long long x) {
  long long ii, jj, kk;
  pair<long long, long long> y;
  y = make_pair(ll, -5);
  in[1] = GG.lower_bound(y);
  in[2] = in[1];
  while (in[2] != GG.end() && (*in[2]).first <= rr) {
    G[(*in[2]).second] = x;
    in[2]++;
  }
  GG.erase(in[1], in[2]);
}
int main() {
  scanf("%I64d%I64d%I64d", &a, &g, &r);
  T = g + r;
  for (i = 1; i <= a + 1; i++) {
    scanf("%I64d", &len[i]);
    len[i] += len[i - 1];
  }
  scanf("%I64d", &b);
  for (i = 1; i <= b; i++) scanf("%I64d", &B[i]);
  for (i = 1; i <= b; i++) GG.insert(make_pair(B[i] % T, a + 1 + i));
  for (i = 0; i <= a + b + 1; i++) G[i] = a + 1;
  for (i = 1; i <= a + 1; i++) {
    c = Mod(g - len[i]);
    d = Mod(T - len[i] - 1);
    if (c <= d)
      Make_G(c, d, i);
    else
      Make_G(c, T - 1, i);
    if (c > d) Make_G(0, d, i);
    GG.insert(make_pair(Mod(T - len[i]), i));
  }
  for (i = a; i >= 1; i--) {
    H[i] = H[G[i]];
    if (G[i] != a + 1)
      H[i] += ((len[G[i]] - len[i]) / T + 1) * T;
    else
      H[i] += len[G[i]] - len[i];
  }
  for (i = 1; i <= b; i++) {
    if (G[a + 1 + i] != a + 1)
      e = ((B[i] + len[G[a + 1 + i]]) / T + 1) * T;
    else
      e = B[i] + len[G[a + 1 + i]];
    e += H[G[a + 1 + i]];
    printf("%I64d\n", e);
  }
  return 0;
}
