#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:256000000")
using namespace std;
long long Hash(string s) {
  long long hash, pow;
  hash = 0;
  pow = 1;
  for (int i = 0; i < s.size(); i++) {
    hash += s[i] - 'a' + 1;
    pow *= 31;
  }
  return hash;
}
long long gcd(long long a, long long b) {
  while (a) {
    b %= a;
    swap(a, b);
  }
  return b;
}
long long sum[100500];
long long a[100500];
vector<long long> ans;
int main() {
  long long n;
  scanf("%I64d", &n);
  for (int i = 0; i < n; i++) scanf("%I64d", &a[i]);
  sort(a, a + n);
  ans.resize(100500);
  for (int i = 0; i < 100500; i++) {
    ans[i] = -1;
  }
  for (int i = 0; i < n; i++) {
    sum[i] = a[i];
    if (i) sum[i] += sum[i - 1];
  }
  long long q;
  scanf("%I64d", &q);
  for (int i = 0; i < q; i++) {
    long long k;
    scanf("%I64d", &k);
    if (ans[k] != -1) {
      printf("%I64d ", ans[k]);
      continue;
    }
    long long res = 0;
    long long x = n - 2;
    long long lvl = 1;
    long long sz = k;
    while (x >= 0) {
      long long r1, r2;
      r1 = 0;
      r2 = 0;
      if (x - sz >= 0 && x - sz < 100500) r1 = -sum[x - sz];
      if (x >= 0 && x < 100500) r2 = sum[x];
      res = res + (r1 + r2) * lvl;
      x = x - sz;
      sz *= k;
      lvl++;
    }
    ans[k] = res;
    printf("%I64d ", res);
  }
  return 0;
}
