#include int ri() { int n; scanf("%d", &n); return n; } void rsort(int *x, int n) { int c[256] = { 0 }; int *r0 = (int *) malloc(sizeof(int) * n); assert(r0); for (int i = 0; i < n; i++) c[x[i] & 0x7F]++; for (int i = 1; i < 128; i++) c[i] += c[i - 1]; for (int i = n - 1; i >= 0; i--) r0[--c[x[i] & 0x7F]] = x[i]; memset(c, 0, sizeof(c)); for (int i = 0; i < n; i++) c[r0[i] >> 7 & 0xFF]++; for (int i = 1; i < 256; i++) c[i] += c[i - 1]; for (int i = n - 1; i >= 0; i--) x[--c[r0[i] >> 7 & 0xFF]] = r0[i]; memset(c, 0, sizeof(c)); for (int i = 0; i < n; i++) c[x[i] >> 15 & 0xFF]++; for (int i = 1; i < 256; i++) c[i] += c[i - 1]; for (int i = n - 1; i >= 0; i--) r0[--c[x[i] >> 15 & 0xFF]] = x[i]; memset(c, 0, sizeof(c)); for (int i = 0; i < n; i++) c[r0[i] >> 23 & 0xFF]++; for (int i = 1; i < 256; i++) c[i] += c[i - 1]; for (int i = n - 1; i >= 0; i--) x[--c[r0[i] >> 23 & 0xFF]] = r0[i]; for (int i = 1; i < n; i++) assert(x[i] >= x[i - 1]); free(r0); } int main() { int n = ri(); int k = ri(); int a[n]; for (auto &i : a) i = ri(); int all[n - k + 1]; int cur = std::accumulate(a, a + k, 0); for (int i = 0; i <= n - k; i++) { all[i] = cur + 1000000000; cur -= a[i]; if (i + k < n) cur += a[i + k]; } rsort(all, n - k + 1); int q = ri(); for (int i = 0; i < q; i++) { int x = ri(); printf("%d\n", (int) (std::upper_bound(all, all + n - k + 1, x + 1000000000) - all)); } return 0; }