#include <bits/stdc++.h>
using namespace std;
int n, cnt;
long long g, r, l[300005], s[300005], seq[300005], dp[300005], p;
int Min[300005 * 20];
void insert(int now, int l, int r, int pos, int val) {
  if (r < pos || l > pos) return;
  if (l == r) {
    Min[now] = val;
    return;
  }
  int mid = (l + r) >> 1;
  insert(now << 1, l, mid, pos, val);
  insert(now << 1 | 1, mid + 1, r, pos, val);
  Min[now] = min(Min[now << 1], Min[now << 1 | 1]);
}
int Query(int now, int l, int r, int ql, int qr) {
  if (ql > qr) return 0x3f3f3f3f;
  if (r < ql || l > qr) return 0x3f3f3f3f;
  if (ql <= l && r <= qr) return Min[now];
  int mid = (l + r) >> 1;
  return min(Query(now << 1, l, mid, ql, qr),
             Query(now << 1 | 1, mid + 1, r, ql, qr));
}
void upd(int id) {
  int tmp = lower_bound(seq, seq + cnt / 2, (-s[id] % p + p) % p) - seq;
  insert(1, 0, cnt, tmp, id), insert(1, 0, cnt, tmp + cnt / 2, id);
}
int main() {
  memset(Min, 0x3f, sizeof Min);
  scanf("%d%I64d%I64d", &n, &g, &r);
  p = g + r;
  for (int i = 1; i <= n + 1; i++) {
    scanf("%I64d", &l[i]);
    s[i - 1] = l[i];
    l[i] += l[i - 1];
    s[i] += s[i + 1];
  }
  for (int i = n; i >= 0; i--) s[i] += s[i + 1], seq[i] = (-s[i] % p + p) % p;
  cnt = n + 1;
  sort(seq, seq + 1 + n);
  cnt = unique(seq, seq + 1 + n) - seq;
  cnt += cnt;
  dp[n] = s[n];
  upd(n);
  int x, y;
  for (int i = n - 1; i >= 0; i--) {
    x = lower_bound(seq, seq + cnt / 2, ((g - s[i]) % p + p) % p) - seq +
        cnt / 2,
    y = upper_bound(seq, seq + cnt / 2, ((g + r - s[i] - 1) % p + p) % p) -
        seq + cnt / 2;
    if (x > y) x -= cnt / 2;
    int tmp = Query(1, 0, cnt, x, y - 1);
    if (tmp > n)
      dp[i] = s[i];
    else
      dp[i] = ((s[i] - s[tmp]) / p + ((s[i] - s[tmp]) % p != 0)) * p + dp[tmp];
    if (i > 0) upd(i);
  }
  int q;
  long long u;
  bool tag = (g == 1 && r == 10000);
  scanf("%d", &q);
  for (; q--;) {
    scanf("%I64d", &u);
    x = lower_bound(seq, seq + cnt / 2, ((g - s[0] - u) % p + p) % p) - seq +
        cnt / 2,
    y = upper_bound(seq, seq + cnt / 2, ((g + r - s[0] - u - 1) % p + p) % p) -
        seq + cnt / 2;
    if (x > y || (x == y && ((g - s[0] - u) % p + p) % p >
                                ((g + r - s[0] - u - 1) % p + p) % p))
      x -= cnt / 2;
    int tmp = Query(1, 0, cnt, x, y - 1);
    if (tmp > n)
      printf("%I64d\n", u + s[0]);
    else
      printf("%I64d\n",
             ((s[0] + u - s[tmp]) / p + ((s[0] + u - s[tmp]) % p != 0)) * p +
                 dp[tmp]);
  }
}
