#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
const int inf = 0x3f3f3f3f;
template <class T>
inline void getin(T& num) {
  char c;
  bool flag = 0;
  num = 0;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') flag = 1;
  while (c >= '0' && c <= '9') {
    num = num * 10 + c - 48;
    c = getchar();
  }
  if (flag) num = -num;
}
int n, q, cnt;
long long t, g, r, dis[N], f[N], tep[N];
namespace seg {
int M, mini[N << 2];
inline void Init() {
  for (M = 1; M < cnt; M <<= 1)
    ;
  memset(mini, 0x3f, sizeof mini);
}
inline void Insert(int pos, int val) {
  mini[pos += M] = val;
  for (pos = pos >> 1; pos; pos >>= 1)
    mini[pos] = min(mini[pos << 1], mini[pos << 1 | 1]);
}
inline int getmin(int s, int t) {
  if (t < s) return inf;
  if (s == t) return mini[s + M];
  int L = mini[s += M], R = mini[t += M];
  while (s ^ t ^ 1) {
    if (~s & 1) L = min(L, mini[s ^ 1]);
    if (t & 1) R = min(R, mini[t ^ 1]);
    s >>= 1, t >>= 1;
  }
  return min(L, R);
}
}  // namespace seg
inline int calc(long long down, long long up) {
  int p = lower_bound(tep + 1, tep + cnt + 1, down) - tep;
  if (p > cnt) return inf;
  int q = upper_bound(tep + 1, tep + cnt + 1, up) - tep - 1;
  if (q > cnt) return inf;
  return seg::getmin(p, q);
}
int main() {
  getin(n), getin(g), getin(r);
  for (int i = 1; i <= n + 1; i++) getin(dis[i]);
  for (int i = 1; i <= n + 1; i++) {
    dis[i] += dis[i - 1];
    tep[++cnt] = dis[i] % (g + r);
  }
  sort(tep + 1, tep + cnt + 1);
  cnt = unique(tep + 1, tep + cnt + 1) - tep - 1;
  seg::Init();
  for (int i = n; i; i--) {
    int k = inf;
    k = min(k, calc(dis[i] % (g + r) + g, g + r - 1));
    k = min(k, calc(dis[i] % (r + g) - r, dis[i] % (r + g) - 1));
    if (k > n)
      f[i] = dis[n + 1] - dis[i];
    else
      f[i] = dis[k] - dis[i] + (g + r - (dis[k] - dis[i]) % (g + r)) + f[k];
    int p = lower_bound(tep + 1, tep + cnt + 1, dis[i] % (g + r)) - tep;
    seg::Insert(p, i);
  }
  getin(q);
  while (q--) {
    getin(t);
    long long tt = t, ans;
    int k = inf;
    t %= (g + r);
    if (t <= g) {
      k = min(k, calc(g - t, g + r - 1 - t));
    } else {
      k = min(k, calc(0, g + r - 1 - t));
      k = min(k, calc(r + g - t + g, r + g - 1));
    }
    if (k > n)
      ans = tt + dis[n + 1];
    else
      ans = tt + dis[k] + (g + r - (tt + dis[k]) % (g + r)) + f[k];
    cout << ans << '\n';
  }
  return 0;
}
