代码:
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
typedef long long ll;
typedef long double LDB;
typedef vector<ll>vec;
typedef vector<vec>mat;
const int MOD=1e9;
const int INF=0x3f3f3f3f;
const int N=1e5+5;
int n,m,T;
ll a[N];
ll sum[33][N];
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++) scanf("%d",&a[i]);
sort(a+1,a+n+1);
for(int i=1; i<=32; i++) {
sum[i][0]=0;
for(int j=1; j<=n; j++) {
sum[i][j]=sum[i][j-1]+a[j]/i;
sum[i][j]%=MOD;
}
}
ll ans=0;
for(int i=1; i<=m; i++) {
int p;
scanf("%d",&p);
ll t=1,res=0;
for(ll x=1; t<INF; x++) {
ll l=t+1,r=t*p;
t=t*p;
int pos=upper_bound(a+1,a+n+1,r)-(a+1);
int pos2=upper_bound(a+1,a+n+1,l-1)-(a+1);
res+=sum[x][pos]-sum[x][pos2];
res=(res+MOD)%MOD;
}
ans=(ans+i*res)%MOD;
}
printf("%d\n",ans);
}
return 0;
}