//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; }