#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;

	}
}