//good luck
# include <iostream>
# include <cstdio>
# include <cmath>
# include <cstdlib>
# include <cstring>
# include <string>
# include <algorithm>
# include <vector>
# include <queue>
# include <ctime>
# include <map>
#define LL long long
#define maxn int(1e6+5)
#define inf (int)1e9
#define is(a) (a>='0'&&a<='9')
#define iabs(a) ((a)>0?(a):(-a))
#define imax(a,b) ((a)>(b)?(a):(b))
#define imin(a,b) ((a)<(b)?(a):(b))
using namespace std;
LL N,M,n,a[maxn],sum[maxn];
LL f[maxn];
inline void read(LL &x)
{
x=0;bool f=0;char ch=getchar();
for (;!is(ch);ch=getchar()) f|=ch=='-';
for (;is(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
x=f?-x:x;
}
inline LL gcd(LL x,LL y){return x%y==0?y:gcd(y,x%y);}
inline void work(LL x)
{
if (x == 1)
{
for (int i = 1; i <= N; ++i) f[x] += a[i] * a[i];
return;
}
if (x == 2)
{
for (int i = 1; i <= N; i += 2) f[x] += a[i] * a[i+1] * 2;
return;
}
for (int i = N; i >= 1; i -= x)
{
f[x] += sum[i-x+3] - sum[i+1] + a[i] * a[i-1] + a[i-x+1] * a[i-x+2];
}
}
int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
read(N); read(M);
for (int i = 1; i <= N; ++i) read(a[i]);
sort(a+1,a+1+N);
for (int i = N; i >= 3; --i) sum[i] = sum[i+1] + a[i] * a[i-2];
n = sqrt(N);
for (int i = 1; i <= n; ++i)
{
if (N % i == 0) work(i);
if (N / i != i) work(N/i);
}
for (int i = 1; i <= M; ++i)
{
LL x,k;
read(x);
k = N / gcd(x,N);
printf("%lld\n",f[k]);
}
return 0;
}