#include <bits/stdc++.h>
using namespace std;
const int inf = 1000000000;
long long need[100001], sum[100002];
int axis[100002], minv[1 << 20], l[100001];
void makeTree(int i, int l, int r, int n) {
  minv[i] = inf;
  if (l + 1 == r) return;
  int mid = (l + r) / 2;
  makeTree(i * 2, l, mid, n);
  makeTree(i * 2 + 1, mid, r, n);
}
int getMin(int i, int l, int r, int l1, int r1) {
  if (l1 == r1) return inf;
  if (l1 <= l && r <= r1) return minv[i];
  int mid = (l + r) / 2, res = inf;
  if (l1 < mid) res = min(res, getMin(i * 2, l, mid, l1, r1));
  if (r1 > mid) res = min(res, getMin(i * 2 + 1, mid, r, l1, r1));
  return res;
}
void change(int i, int l, int r, int loc, int x) {
  minv[i] = min(minv[i], x);
  if (l + 1 == r) return;
  int mid = (l + r) / 2;
  if (loc < mid) change(i * 2, l, mid, loc, x);
  if (loc >= mid) change(i * 2 + 1, mid, r, loc, x);
}
int query(int tot, int t, int g, int m) {
  int a, b, res = inf;
  a = lower_bound(axis, axis + tot, g - t) - axis;
  b = lower_bound(axis, axis + tot, m - t) - axis;
  res = min(res, getMin(1, 0, tot, a, b));
  a = lower_bound(axis, axis + tot, g + m - t) - axis;
  b = lower_bound(axis, axis + tot, 2 * m - t) - axis;
  res = min(res, getMin(1, 0, tot, a, b));
  return res;
}
int main() {
  int n, g, r;
  scanf("%d%d%d", &n, &g, &r);
  int m = g + r;
  for (int i = 0; i <= n; i++) scanf("%d", &l[i]);
  sum[0] = 0;
  for (int i = 0; i <= n; i++) sum[i + 1] = sum[i] + l[i];
  for (int i = 0; i <= n + 1; i++) axis[i] = (int)(sum[i] % m);
  sort(axis, axis + n + 2);
  int tot = unique(axis, axis + n + 2) - axis;
  makeTree(1, 0, tot, n);
  need[n] = l[n];
  for (int i = n - 1; i >= 0; i--) {
    int tmp = lower_bound(axis, axis + tot, (int)(sum[i + 1] % m)) - axis;
    change(1, 0, tot, tmp, i + 1);
    tmp = query(tot, (m - (int)(sum[i] % m)) % m, g, m);
    if (tmp < inf) {
      long long s = sum[tmp] - sum[i];
      need[i] = need[tmp] + (s / m + 1) * m;
    } else {
      need[i] = sum[n + 1] - sum[i];
    }
  }
  int q;
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    int t;
    scanf("%d", &t);
    int tmp = query(tot, (int)(t % m), g, m);
    long long ans;
    if (tmp < inf) {
      long long s = t + sum[tmp];
      ans = need[tmp] + (s / m + 1) * m;
    } else {
      ans = t + sum[n + 1];
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
