#include <iostream>
#include <cstdio>
#include <cmath>
#define MOD 1000000007
#define gc getchar_unlocked
using namespace std;
void scaninp(int &a)
{
register int b;
a = 0;
b = gc();
for (; ((b < 48) || (b > 57)); b = gc());
for (; ((b > 47) && (b < 58)); b = gc()) {
a = (a << 1) + (a << 3) + b-48;
}
}
int power(int a, int b)
{
if (b == 0)
return 1;
if (b == 1)
return a;
else if (b &1) {
int z;
z = power(a,b/2);
return (z*z*a);
} else {
int z;
z = power(a,b/2);
return (z*z);
}
}
int main() {
// your code goes here
int tcase,n,q,i,j,k,x,l,ans,t1,temp;
double y,z;
scaninp(tcase);
while (tcase--) {
scaninp(n);
scaninp(q);
int a[n+1],s[n+1];
s[0] = 0;
for (i = 1; i <= n; ++i) {
scaninp(a[i]);
a[i] = (a[i] + MOD) % MOD;
s[i] = (s[i-1] + a[i])%MOD;
}
for (i = 1; i <= q; ++i) {
scaninp(x);
ans = 0;
x = x % MOD;
for (j = 1; j <=n; ++j) {
if (j == 1) {
temp = x;
t1 = temp;
} else if ( j == 2){
z = sqrt((double)x);
temp = (int)z;
t1 = temp;
} else {
y = (double)1.00/(double)j;
z = pow((double)x, y);
temp = (int)z;
t1 = temp;
}
if (power(temp,j) <= x) {
while (power(t1++,j) <= x);
t1 = t1 -2;
} else {
while (power(t1--,j) > x);
t1 = t1+1;
}
if (t1 == 1)
break;
ans = (ans + (t1 * a[j])%MOD)%MOD;
}
if (j < n)
ans = (ans + s[n]-s[j]+MOD)%MOD;
printf("%d\n", ans);
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8Y21hdGg+CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBnYyBnZXRjaGFyX3VubG9ja2VkCiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp2b2lkIHNjYW5pbnAoaW50ICZhKQp7CglyZWdpc3RlciBpbnQgYjsKCWEgPSAwOwoJCgliID0gZ2MoKTsKCQoJZm9yICg7ICgoYiA8IDQ4KSB8fCAoYiA+IDU3KSk7IGIgPSBnYygpKTsKCWZvciAoOyAoKGIgPiA0NykgJiYgKGIgPCA1OCkpOyBiID0gZ2MoKSkgewoJCWEgPSAoYSA8PCAxKSArIChhIDw8IDMpICsgYi00ODsKCX0KfQppbnQgcG93ZXIoaW50IGEsIGludCBiKQp7CglpZiAoYiA9PSAwKQoJCXJldHVybiAxOwoJaWYgKGIgPT0gMSkKCQlyZXR1cm4gYTsKCWVsc2UgaWYgKGIgJjEpIHsKCQlpbnQgejsKCQl6ID0gcG93ZXIoYSxiLzIpOwoJCXJldHVybiAoeip6KmEpOwoJfSBlbHNlIHsKCQlpbnQgejsKCQl6ID0gcG93ZXIoYSxiLzIpOwoJCXJldHVybiAoeip6KTsKCX0KfQoJCQppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWludCB0Y2FzZSxuLHEsaSxqLGsseCxsLGFucyx0MSx0ZW1wOwoJZG91YmxlIHksejsKCXNjYW5pbnAodGNhc2UpOwoJCgl3aGlsZSAodGNhc2UtLSkgewoJCXNjYW5pbnAobik7CgkJc2NhbmlucChxKTsKCQkKCQlpbnQgYVtuKzFdLHNbbisxXTsKCQkKCQlzWzBdID0gMDsKCQkKCQlmb3IgKGkgPSAxOyBpIDw9IG47ICsraSkgewoJCQlzY2FuaW5wKGFbaV0pOwoJCQlhW2ldID0gKGFbaV0gKyBNT0QpICUgTU9EOwoJCQlzW2ldID0gKHNbaS0xXSArIGFbaV0pJU1PRDsKCQl9CgkJCgkJZm9yIChpID0gMTsgaSA8PSBxOyArK2kpIHsKCQkJc2NhbmlucCh4KTsKCQkJYW5zID0gMDsKCQkJeCA9IHggJSBNT0Q7CgkJCQoJCQlmb3IgKGogPSAxOyBqIDw9bjsgKytqKSB7CgkJCQlpZiAoaiA9PSAxKSB7CgkJCQkJdGVtcCA9IHg7CgkJCQkJdDEgPSB0ZW1wOwoJCQkJfSBlbHNlIGlmICggaiA9PSAyKXsKCQkJCQl6ID0gc3FydCgoZG91YmxlKXgpOwoJCQkJCXRlbXAgPSAoaW50KXo7CgkJCQkJdDEgPSB0ZW1wOwoJCQkJfSBlbHNlIHsKCQkJCQl5ID0gKGRvdWJsZSkxLjAwLyhkb3VibGUpajsKCQkJCQl6ID0gcG93KChkb3VibGUpeCwgeSk7CgkJCQkJdGVtcCA9IChpbnQpejsKCQkJCQl0MSA9IHRlbXA7CgkJCQl9CgkJCQkKCQkJCWlmIChwb3dlcih0ZW1wLGopIDw9IHgpIHsKCQkJCQl3aGlsZSAocG93ZXIodDErKyxqKSA8PSB4KTsKCQkJCQl0MSA9IHQxIC0yOwoJCQkJfSBlbHNlIHsKCQkJCQl3aGlsZSAocG93ZXIodDEtLSxqKSA+IHgpOwoJCQkJCXQxID0gdDErMTsKCQkJCX0KCQkJCQoJCQkJaWYgKHQxID09IDEpCgkJCQkJYnJlYWs7CgkJCQkJCgkJCQlhbnMgPSAoYW5zICsgKHQxICogYVtqXSklTU9EKSVNT0Q7CgkJCX0KCQkJaWYgKGogPCBuKQoJCQkJYW5zID0gKGFucyArIHNbbl0tc1tqXStNT0QpJU1PRDsKCQkJcHJpbnRmKCIlZFxuIiwgYW5zKTsKCQl9Cgl9CglyZXR1cm4gMDsKfSA=