#include <bits/stdc++.h>
using namespace std;
map<int, int> my;
map<int, int>::iterator it;
int in(int x, int y) {
  if (x != -1 && (y == -1 || x < y)) {
    return x;
  }
  return y;
}
int z[100005 * 4] = {0};
int find(int id, int p, int q, int pp, int qq) {
  if (p == pp && q == qq) {
    return z[id];
  }
  int id1 = id + id + 1;
  int id2 = id1 + 1;
  int mid = (p + q) / 2;
  if (qq <= mid) {
    return find(id1, p, mid, pp, qq);
  }
  if (pp > mid) {
    return find(id2, mid + 1, q, pp, qq);
  }
  int now1 = find(id1, p, mid, pp, mid);
  int now2 = find(id2, mid + 1, q, mid + 1, qq);
  return in(now1, now2);
}
void insert(int id, int p, int q, int k, int v) {
  if (p == q) {
    z[id] = in(z[id], v);
    return;
  }
  int id1 = id + id + 1;
  int id2 = id1 + 1;
  int mid = (p + q) / 2;
  if (k <= mid) {
    insert(id1, p, mid, k, v);
  } else {
    insert(id2, mid + 1, q, k, v);
  }
  z[id] = in(z[id1], z[id2]);
}
int t = 0, g = 0, r = 0;
int get(int pp, int qq) {
  int p = 0, q = 0;
  it = my.lower_bound(pp);
  if (it != my.end()) {
    p = it->second;
  } else {
    return -1;
  }
  it = my.upper_bound(qq);
  if (it != my.begin()) {
    it--;
    q = it->second;
  } else {
    return -1;
  }
  if (p > q) {
    return -1;
  }
  return find(0, 1, t, p, q);
}
int tt(long long sum) {
  int pp = 0, qq = 0;
  pp = (-sum + g) % (g + r);
  if (pp < 0) {
    pp += g + r;
  }
  qq = (-sum - 1) % (g + r);
  if (qq < 0) {
    qq += g + r;
  }
  if (pp <= qq) {
    return get(pp, qq);
  } else {
    return in(get(pp, g + r - 1), get(0, qq));
  }
}
long long a[100005] = {0}, s[100005] = {0};
int v[100005] = {0};
int main() {
  int n = 0, i = 0, now = 0, Q = 0, x = 0;
  while (scanf("%d%d%d", &n, &g, &r) == 3) {
    my.clear();
    for (i = 0; i <= n; i++) {
      scanf("%d", v + i);
    }
    s[n + 1] = 0;
    for (i = n; i >= 0; i--) {
      s[i] = s[i + 1] + v[i];
      if (i > 0) {
        now = -s[i] % (g + r);
        if (now < 0) {
          now += (g + r);
        }
        my[now] = -1;
      }
    }
    t = 0;
    for (it = my.begin(); it != my.end(); it++) {
      it->second = ++t;
    }
    memset(z, 0XFF, sizeof(z));
    for (i = n; i >= 1; i--) {
      now = tt(s[i]);
      if (now != -1) {
        a[i] = a[now] + s[i] - s[now] + (g + r - (s[i] - s[now]) % (g + r));
      } else {
        a[i] = s[i];
      }
      now = -s[i] % (g + r);
      if (now < 0) {
        now += g + r;
      }
      now = my[now];
      insert(0, 1, t, now, i);
    }
    scanf("%d", &Q);
    while (Q--) {
      scanf("%d", &x);
      now = tt(s[0] + x);
      if (now != -1) {
        printf("%I64d\n", a[now] + s[0] + x - s[now] +
                              (g + r - (s[0] + x - s[now]) % (g + r)));
      } else {
        printf("%I64d\n", s[0] + x);
      }
    }
  }
  return 0;
}
