#include <bits/stdc++.h>
using namespace std;
struct wezel {
  long long lewy, prawy, minimum;
};
int n, ile, q;
long long g, r, mod, w;
long long l[100007], tab[100007], tajm[100007];
wezel d[2 * 131072];
void insert_init(long long val, int poz) {
  poz += 131072;
  d[poz].lewy = d[poz].prawy = val;
  d[poz].minimum = 2000000000;
  poz /= 2;
  while (poz) {
    d[poz].lewy = d[2 * poz].lewy;
    d[poz].prawy = d[2 * poz + 1].prawy;
    d[poz].minimum = 2000000000;
    poz /= 2;
  }
}
void insert(long long val, int minim) {
  int poz = 1;
  d[poz].minimum = minim;
  while (poz < 131072) {
    if (d[2 * poz].prawy < val)
      poz = 2 * poz + 1;
    else
      poz = 2 * poz;
    d[poz].minimum = minim;
  }
}
int query(long long a, long long b, int v) {
  if (b < d[v].lewy) return 2000000000;
  if (a > d[v].prawy) return 2000000000;
  if (a <= d[v].lewy && d[v].prawy <= b) return d[v].minimum;
  int res = 2000000000;
  if (d[2 * v].prawy >= a)
    res = min(res, query(a, min(b, d[2 * v].prawy), 2 * v));
  if (d[2 * v + 1].lewy <= b)
    res = min(res, query(max(a, d[2 * v + 1].lewy), b, 2 * v + 1));
  return res;
}
int main() {
  scanf("%d%lld%lld", &n, &g, &r);
  mod = g + r;
  for (int i = 0; i < (n + 1); i++) scanf("%lld", &l[i]);
  for (int i = (n); i >= (0); i--) {
    l[i] += l[i + 1];
    tab[i] = ((-l[i]) % mod + mod) % mod;
  }
  sort(tab, tab + n + 1);
  ile = unique(tab, tab + n + 1) - tab;
  for (int i = 0; i < (ile); i++) insert_init(tab[i], i);
  for (int i = (ile); i <= (131072 - 1); i++) insert_init(2000000000, i);
  tajm[n] = l[n];
  insert((mod - (l[n] % mod)) % mod, n);
  for (int i = (n - 1); i >= (1); i--) {
    long long x = l[i] % mod;
    long long le = g - x, pr = -1 - x + mod;
    if (le < 0) le += mod;
    int poz;
    if (le <= pr)
      poz = query(le, pr, 1);
    else
      poz = min(query(le, mod - 1, 1), query(0, pr, 1));
    if (poz == 2000000000)
      tajm[i] = l[i];
    else
      tajm[i] = tajm[poz] + l[i] - l[poz] + (mod - ((l[i] - l[poz]) % mod));
    insert((mod - x) % mod, i);
  }
  scanf("%d", &q);
  while (q--) {
    scanf("%lld", &w);
    long long x = (l[0] + w) % mod;
    long long le = g - x, pr = -1 - x + mod;
    if (le < 0) le += mod;
    int poz;
    if (le <= pr)
      poz = query(le, pr, 1);
    else
      poz = min(query(le, mod - 1, 1), query(0, pr, 1));
    if (poz == 2000000000)
      printf("%lld\n", w + l[0]);
    else
      printf("%lld\n",
             tajm[poz] + l[0] - l[poz] + w + (mod - (l[0] - l[poz] + w) % mod));
  }
  return 0;
}
