//by vanjape rajas mangesh

#include<bits/stdc++.h>

using namespace std;

typedef pair<int,int> pii;
typedef vector< pii > vpii;
typedef vector<int> vi;
typedef vector< vi > vvi;
typedef long long int ll;
typedef unsigned long long int ull;

#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define sz(a) (int)(a.size())
#define all(a) a.begin(),a.end()
#define mset(a,b) memset(a,b,sizeof(a))
#define LET(x,a) __typeof(a) x(a)

#define rep(i, begin, end) for (__typeof(end) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
//Works for forward as well as backward iteration

#define gu getchar
#define pu putchar
#define si(n) scanf("%d",&n)
#define dout(n) printf("%d\n",n)
#define sll(n) scanf("%lld",&n)
#define lldout(n) printf("%lld\n",n)

#define drt() int t; cin>>t; while(t--)
#define ___ ios_base::sync_with_stdio(false);cin.tie(NULL);

#define pluswrap(index,n) index = (index+1)%n		//index++; if(index>=n) index=0
#define minuswrap(index,n) index = (index + n -1)%n 	//index--; if(index<0) index=n-1
#define roundofint(d) d = (int)((double)d + 0.5)	//Round off d to nearest integer

#define flushn while(gu()!='\n')
#define flushs while(gu()!=' ')

#define TRACE

#ifdef TRACE
#define trace1(x)                cerr << #x << ": " << x << endl;
#define trace2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
#define trace3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
#define trace4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
#define trace5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
#define trace6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;

#else

#define trace1(x)
#define trace2(x, y)
#define trace3(x, y, z)
#define trace4(a, b, c, d)
#define trace5(a, b, c, d, e)
#define trace6(a, b, c, d, e, f)

#endif

//FILE *fin = freopen("in","r",stdin);
//FILE *fout = freopen("out","w",stdout);

ll ans[3500];
ll rev[3500];
int val[3];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		ll n;
		cin>>n;
		cin>>val[0]>>val[1]>>val[2];
		sort(val,val+3);
		for(int i=0;i<3500;i++)
			ans[i]=0;
		ans[0]=1;
		rev[0]=1;
		if(n==1)
		{
			cout<<"0\n";
			continue;
		}
		for(int i=1;i<=3500;i++)
		{
			if(i<val[1])
			{
				rev[i]=rev[i-1];
				continue;
			}
			ll ct=0;
			int temp=0;
			if(ans[i-val[0]]>0)
			{
				temp++;
			}
			if(ans[i-val[1]]>0)
			{
				temp++;
			}
			if(i-val[2]>=0)
				if(ans[i-val[2]]>0)
					temp++;
			if(temp==0)
			{
				rev[i]=rev[i-1];
				continue;
			}
			ct+=rev[i-val[0]];
			ct+=rev[i-val[1]];
			if(i-val[2]>=0)
				ct+=rev[i-val[2]];
			ans[i]=ct;
			rev[i]=ct;
			if(ans[i]>=n)
			{
				cout<<i<<"\n";
				break;
			}
		}
	}
        return 0;
}