#include <bits/stdc++.h>
using namespace std;
struct node {
  node *l;
  node *r;
  node *par;
  int s, e;
  long long min;
  long long kS, kE;
};
node *root;
long long t[101000];
long long s[101000];
pair<long long, long long> kS[101000];
long long tToEnd[101000];
void buildTree(node *now, int s, int e) {
  now->s = s;
  now->e = e;
  now->min = (((1LL) << (63LL)) - 1LL);
  now->kS = kS[s].first;
  now->kE = kS[e].first;
  if (now->s + 1 == e) {
    now->l = NULL;
    now->r = NULL;
    return;
  }
  now->l = new node();
  now->r = new node();
  now->l->par = now;
  now->r->par = now;
  buildTree(now->l, s, (s + e) / 2);
  buildTree(now->r, (s + e) / 2, e);
}
long long treeGet(long long lKey, long long rKey, node *now) {
  if (now == NULL) return (((1LL) << (63LL)) - 1LL);
  if (now->s + 1 == now->e) {
    if (now->kS >= lKey && now->kS < rKey) return now->min;
    if (lKey > rKey) {
      if (now->kS >= lKey || now->kS < rKey) return now->min;
    }
    return (((1LL) << (63LL)) - 1LL);
  }
  if (lKey <= rKey) {
    if (now->kE < lKey || now->kS >= rKey) return (((1LL) << (63LL)) - 1LL);
    if (now->kS >= lKey && now->kE <= rKey) return now->min;
    return min(treeGet(lKey, rKey, now->l), treeGet(lKey, rKey, now->r));
  } else {
    if (now->kS >= rKey && now->kE <= lKey) return (((1LL) << (63LL)) - 1LL);
    if (now->kE <= rKey) return now->min;
    if (now->kS >= lKey) return now->min;
    return min(treeGet(lKey, rKey, now->l), treeGet(lKey, rKey, now->r));
  }
}
void treeSet(node *now, int key, int value) {
  if (now == NULL) return;
  if (key < now->kS || key >= now->kE) {
    return;
  }
  if (now->s + 1 == now->e) {
    now->kE = now->kS + 1;
    if (now->kS == key) {
      now->min = value;
      if (now->par != NULL) {
        node *up = now->par;
        while (up != NULL) {
          up->min = min(up->l->min, up->r->min);
          up->kE = up->r->kE;
          up = up->par;
        }
      }
    }
    return;
  }
  if (now->l->kS <= key && now->l->kE > key)
    treeSet(now->l, key, value);
  else
    treeSet(now->r, key, value);
}
long long getMod(long long k, long long p) {
  return (p + (-p + (p + k) % p) % p) % p;
}
int main() {
  long long n, g, r;
  cin >> n >> g >> r;
  long long p = g + r;
  for (int i = 0; i <= n; i++) {
    cin >> t[i];
  }
  for (int i = n - 1; i >= 0; i--) {
    s[i] = s[i + 1] + t[i + 1];
    kS[i] = make_pair(getMod(-s[i], p), (((1LL) << (63LL)) - 1LL));
  }
  sort(kS, kS + n);
  long long n2 = 1;
  for (int i = 1; i < n; i++) {
    if (kS[i].first == kS[n2 - 1].first) continue;
    kS[n2++].first = kS[i].first;
  }
  root = new node();
  root->par = NULL;
  kS[n2].first = kS[n2 - 1].first + 1;
  buildTree(root, 0, n2);
  for (int i = n - 1; i >= 0; i--) {
    long long key = getMod(-s[i], p);
    long long next = treeGet(getMod(g - s[i], p), getMod(-s[i], p), root);
    if (next == (((1LL) << (63LL)) - 1LL)) {
      tToEnd[i] = s[i];
    } else {
      tToEnd[i] =
          tToEnd[next] + s[i] - s[next] + getMod(p - (s[i] - s[next]) % p, p);
    }
    treeSet(root, key, i);
  }
  int q;
  cin >> q;
  for (int i = 0; i < q; i++) {
    long long k;
    cin >> k;
    long long S = s[0] + t[0] + k;
    long long next = treeGet(getMod(g - S, p), getMod(-S, p), root);
    if (next == (((1LL) << (63LL)) - 1LL)) {
      cout << S << endl;
    } else {
      long long ans = tToEnd[next];
      ans += S - s[next] + getMod(p - (S - s[next]) % p, p);
      cout << ans << endl;
    }
  }
}
