#include<iostream> #include<cstdio> #include<vector> #include<stack> #include<queue> #include<cmath> #include<algorithm> #include<string> #include<set> #include<utility> #include<functional> #include<map> #include<sstream> #define PB push_back #define FOR(N,i) for(int i =0; i < N; i++) #define lli long long int using namespace std; lli maxi(lli A, lli B, lli C) { return max(A, max(B,C)); } lli mini(lli A, lli B, lli C) { return min(A, min(B,C)); } lli Q[10000005]; int main() { //freopen("input.txt","r",stdin); int T; cin >> T; while(T--) { lli N, A[3]; cin >> N >> A[0] >> A[1] >> A[2]; sort(A, A+3); if(N<=10000000) { int X = 1, Y = 1, Z = 0; Q[0] = -A[2]; Q[1] = 0; Q[2] = A[1]; for(int i = 3; i <= N ; i++) { lli F = maxi( A[0] + Q[X+1], A[1]+ Q[Y], A[2] + Q[Z]); lli G = maxi( A[0] + Q[X] , A[1] + Q[Y+1], A[2] + Q[Z]); lli H = maxi( A[0] + Q[X], A[1] + Q[Y], A[2] + Q[Z+1]); if( F <= G && F <= H) X++; else if(G <= H) Y++; else Z++; Q[i] = mini(F,G,H); //cout << i -1<< " "<< Q[i] << "--" << X<< " "<< Y<< " " << Z << endl; } cout << Q[N] << endl; continue; } map < lli, lli> P; lli X = 1, Y = 1, Z = 0; P[0] = -A[2]; P[1] = 0; P[2] = A[1]; lli cost = A[1]; map< lli,lli > ::iterator it,it2,it3; lli costX = 0, costY = 0, costZ = -A[2]; for(lli i = 3; i <= N ; ) { it = P.upper_bound(X); lli PX = (*it).second; lli F = maxi( A[0] + PX , A[1]+ costY, A[2] + costZ); it2 = P.upper_bound(Y); lli PY = (*it2).second; lli G = maxi( A[0] + costX , A[1] + PY, A[2] + costZ); it3 = P.upper_bound(Z); lli PZ = (*it3).second; lli H = maxi( A[0] + costX, A[1] + costY, A[2] + PZ); if( F <= G && F <= H) { if(F > cost) { cost = F; P[i] = cost; } costX = (*it).second; it++; i += (*it).first - 1 - X; X = (*it).first - 1; //cout << "F "<< i - 1<< " "<< cost <<" "<< " " << X << " "<< Y << " "<< Z << endl; } else if(G <= H) { if(G > cost) { cost = G; P[i] = cost; } costY = (*it2).second; it2++; i += (*it2).first - 1 - Y; Y = (*it2).first - 1; //cout <<"G "<< i -1 <<" "<< cost <<" "<< " " << X << " "<< Y << " "<< Z << endl; } else { if(H > cost) { cost = H; P[i] = cost; } costZ = (*it3).second; it3++; i += (*it3).first - 1 - Z; Z = (*it3).first - 1; //cout <<"H "<< i - 1 << " "<< cost <<" "<< " " << X << " "<< Y << " "<< Z << endl; } } /*for(it = P.begin(); it!= P.end(); it++) cout << (*it).first << " " << (*it).second << endl;*/ cout << cost << endl; } }