#include <bits/stdc++.h>
#define SZ(X) ((int)(X).size())
#define ALL(X) (X).begin(), (X).end()
#define REP(I, N) for (int I = 0; I < (N); ++I)
#define REPP(I, A, B) for (int I = (A); I < (B); ++I)
#define RI(X) scanf("%d", &(X))
#define RII(X, Y) scanf("%d%d", &(X), &(Y))
#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))
#define DRI(X) int (X); scanf("%d", &X)
#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)
#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)
#define RS(X) scanf("%s", (X))
#define CASET int ___T, case_n = 1; scanf("%d ", &___T); while (___T-- > 0)
#define MP make_pair
#define PB push_back
#define MS0(X) memset((X), 0, sizeof((X)))
#define MS1(X) memset((X), -1, sizeof((X)))
#define LEN(X) strlen(X)
#define PII pair<int,int>
#define VPII vector<pair<int,int> >
#define PLL pair<long long,long long>
#define F first
#define S second
typedef long long LL;
using namespace std;
const LL INF = 2e15;
const int SIZE = 1e6+10;
// template end here
//#include "interactive/119.h"
/*void Init(int *N,int *a,int *b){
    scanf("%d%d%d",N,a,b);
}
int Ask(char c,int x){
    printf("query %d: ",x);
    int ret;
    scanf("%d",&ret);
    return ret;
}
void Answer(int x){
    printf("answer:%d\n",x);
}*/
LL C(int x,int y,int z){
    //if(y>x-y)y=x-y;
    LL res=1;
    REPP(i,1,y+1){
        res=res*(x-y-z+i)/i;
        if(res>INF)return res;
    }
    REPP(i,1,z+1){
        res=res*(x-z+i)/i;
        if(res>INF)return res;
    }
    return res;
}
int kk[3300][3300];
int used[3300][3300];
int tt;
LL cal(int r,int A[]){
    if(r<0)return 0;
    //if(a<b)swap(a,b);
    tt++;
    LL res=0;
    for(int i=r/A[2];i>=0;i--){
        for(int j=(r-i*A[2])/A[1];j>=0;j--){
            int k=(r-i*A[2]-j*A[1])/A[0];
            kk[i][j]=k;
            used[i][j]=tt;
            if(used[i][j+1]==tt&&kk[i][j+1]>=k)continue;
            if(used[i+1][j]==tt&&kk[i+1][j]>=k)continue;
            LL v=C(i+j+k,j,k);
            res+=v;
            if(res>INF)return INF;
        }
    }
    return res;
}
int q(LL x,int A[]){
    if(x==1)return 0;
    LL ll=A[1],rr=A[2]*32;
    while(ll<rr){
        LL me=(ll+rr)>>1;
        LL V=cal(me,A);
        if(V>=x)rr=me;
        else ll=me+1;
    }
    return ll;
}
int main(){
    CASET{
        int A[3];
        LL N;
        int a,b;
        cin>>N;
        REP(i,3)RI(A[i]);
        sort(A,A+3);
        printf("%d\n",q(N,A));
    }
    return 0;
}