#include <bits/stdc++.h> using namespace std; #define vi vector<int> #define pii pair<int,int> #define x first #define y second #define pb push_back #define mp make_pair #define all(x) x.begin(),x.end() #define ll long long #define inf 1000000007 #define mod 1000000007 #define N 5005 #define DBG(x) cerr<<(#x)<<"="<<x<<endl; #define FOREACH(it,x) for(__typeof(x.begin()) it=x.begin();it!=x.end();it++) template <class T> inline void Max(T &a,T b){if(a<b)a=b;} template <class T> inline void Min(T &a,T b){if(a>b)a=b;} int dp[101],a,b,c,ans[2010]; int solve1(int n){ if(n==1)return 0; if(n<=0)return -inf; int &ret=dp[n]; if(ret+1)return ret; ret=inf; for(int i=0;i<=n;i++) for(int j=i;j<=n;j++){ ret=min(ret,max(solve1(i)+a,max(solve1(j-i)+b,solve1(n-j)+c))); } return ret; } map<ll,int>Dp; ll n; int solve(ll n){ if(n<=100)return solve1(n); if(Dp.find(n)!=Dp.end())return Dp[n]; int l=0,r=60000;int ans=inf; //cerr<<n<<":\n"; return Dp[n]=ans; } ll f[N]; ll solve2(int w){ //if(w<lim)return 1; ll &t=f[w]; if(t+1)return t; t=0; if(w>=a)t+=solve2(w-a); if(w>=b)t+=solve2(w-b); if(w>=c)t+=solve2(w-c); return f[w]=t; } int main(){ int T=800,i,j,k,m; scanf("%d",&T); while(T--){ cin>>n>>a>>b>>c; if(n<=100){ //Dp.clear(); memset(dp,-1,sizeof(dp)); int ans=solve1(n); printf("%d\n",ans);continue; } memset(f,-1,sizeof(f)); int lim=min(a,min(b,c)),ans=0; for(i=0;i<lim;i++)f[i]=1; for(i=1;;i++){ ll t=solve2(i); if(t>=n){ans=i;break;} } printf("%d\n",ans); } //*/ /* a=5,b=5,c=5; Dp.clear(); for(n=1;n<=T;n++){ ans[n]=solve1((int)n); j=solve(1LL*n); if(ans[n]!=j){ cerr<<n<<" "; } //printf("%d\t",ans); } DBG("?") for(i=1;i<=T;i=j){ j=i; while(j<=T&&ans[j]==ans[i]){ j++; } printf("%d %d %d %d\n",i,j-1,ans[i],j-i); } //*/ //int ans=solve(n); return 0; }