#include <bits/stdc++.h>
using namespace std;
#define int long long
int t,k;
long long x,y,tmp,arr[35],dp[35][2];
bool iso[35];
signed main() {
scanf("%lld",&t);
while (t--) {
scanf("%lld%lld%lld",&x,&y,&k);
for (int i=0;i<=k;i++) {
scanf("%lld",&tmp);
for (int j=i;j<=k;j++) {
if (i==0) arr[j]=tmp<<j;
else {
if (arr[j]>(tmp<<(j-i))) arr[j]=(tmp<<(j-i));
}
}
}
if (x>y) swap(x,y);
long long add=(y-x)%(1<<k),res=(y-x)/(1<<k)*arr[k];
int p=0;
for (int i=0;i<k;i++) iso[i]=add&(1<<i);
bool flag=0;
for (int i=0;i<k;i++) {
if (flag) {
if (iso[i]) {
dp[i][0]=dp[i-1][0]+arr[i];
dp[i][1]=dp[i-1][1];
if (dp[i][1]+arr[i+1]<dp[i][0]) dp[i][0]=dp[i][1]+arr[i+1];
if (dp[i][0]+arr[i+1]<dp[i][1]) dp[i][1]=dp[i][0]+arr[i+1];
}
else {
dp[i][0]=dp[i-1][0];
dp[i][1]=dp[i-1][1]+arr[i];
if (dp[i][1]+arr[i+1]<dp[i][0]) dp[i][0]=dp[i][1]+arr[i+1];
if (dp[i][0]+arr[i+1]<dp[i][1]) dp[i][1]=dp[i][0]+arr[i+1];
}
}
if (!flag && iso[i]) {
flag=1;
dp[i][0]=arr[i];
dp[i][1]=arr[i];
}
}
dp[k][0]=dp[k-1][0];
if (dp[k-1][1]+arr[k]<dp[k][0]) dp[k][0]=dp[k-1][1]+arr[k];
printf("%lld\n",dp[k][0]+res);
}
}