#include<cstdio>
#include<map>
#include<set>
#include<queue>
long long int n;
long long int a, b, c, d;
std::map<long long int, long long int> codemp;
std::set<long long int> chkset;
struct st {
long long int v, c;
bool operator<(const st&r)const {
return c > r.c;
}
};
std::priority_queue<st> pq;
long long int ans;
void pqinsert(long long int v, long long int c) {
if (codemp.find(v) != codemp.end()) {
if (codemp[v] < c)return;
}
codemp[v] = c;
st p;
p.v = v;
p.c = c;
pq.push(p);
}
int main() {
int tcn;
scanf("%d", &tcn);
while (tcn--) {
scanf("%lld", &n);
scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
ans = (a + d) * 100LL;
codemp[n] = 0;
st initp;
initp.v = n;
initp.c = 0;
pq.push(initp);
while (pq.size() > 0) {
st pa = pq.top();
pq.pop();
long long int pv = pa.v;
long long int pc = pa.c;
if (chkset.find(pv) != chkset.end()) {
continue;
}
chkset.insert(pv);
pqinsert(pv / 2, a + pc + d * (pv % 2));
pqinsert(pv / 2 + 1, a + pc + d * (2 - pv % 2));
pqinsert(pv / 3, b + pc + d * (pv % 3));
pqinsert(pv / 3 + 1, b + pc + d * (3 - pv % 3));
pqinsert(pv / 5, c + pc + d * (pv % 5));
pqinsert(pv / 5 + 1, c + pc + d * (5 - pv % 5));
if ((ans - pc + d - 1) / d > pv) {
ans = pv * d + pc;
}
}
codemp.clear();
chkset.clear();
printf("%lld\n", ans);
}
return 0;
}