/*
    题意:赌球押胜平负的赔率分别是a, b, c,押n元中了可获得floor(odds * n)。
           给出硬币数coin  问最坏情况下能赚到的钱(因为赔率很大,所以能稳赚不赔,押三个的话)

           最坏情况,也即在某种分配时,取赢钱最小的那种
           用三重for枚举押的情况,当然取最小的作为这种情况的收益,这样铁定TLE
           发现,对于一种押法,我们知道了最小收益的那个,除去这个的另外两重for是枚举是没用的,
           另外两个的押的钱数增加,但答案还是原来那个!
           所以改变枚举的方法,从1枚举到s
           每次只将这一枚硬币放到当前收益最小的那种情况中,然后更新!!
           浮点数,注意加eps  由于只有2位小数,改为整数也行

           有一种优化,就是按照bc,ac,ab的比例先下注,然后再枚举 

           对于这种每次都选最小的,更新的时候应该只更新最小(会使最小的增加)的才高效!

*/

#include
<cstdio>
#include
<cstring>
#include
<algorithm>
using namespace std;

const double eps = 1e-5;
int main()
{
    
int T;
    
for(scanf("%d",&T);T--;)
    
{
        
        
int coin,num[3];
        
long long e[3],ans;
        
double c[3];
        scanf(
"%d%lf%lf%lf",&coin,&c[0],&c[1],&c[2]);
        ans 
= 0;
        num[
0]=num[1]=num[2]=0;
        e[
0]=e[1]=e[2]=0;
        
for(int i=1;i<=coin;i++)
        
{    
            
int k = min_element(e,e+3)-e;
            
++num[k];
            e[k] 
= (int)(num[k]*c[k]+eps);//需要加一点eps   更新完最小后再放进去
            ans = max(ans,*min_element(e,e+3)-i);
        }

        printf(
"%lld\n",ans+coin);
    }

    
return 0;
}



/*
    watashi神牛的代码~~ 0ms
*/

#include 
<cstdio>
#include 
<algorithm>

using namespace std;

int main() {
    
int re;
    
int a, b, s, cc, ccc, ans, d[3], e[3];
    
long long c[3];

    scanf(
"%d"&re);
    
for (int ri = 1; ri <= re; ++ri) {
        scanf(
"%d"&s);
        
for (int i = 0; i < 3++i) {
            scanf(
"%d.%d"&a, &b);
            c[i] 
= a * 100 + b;
        }


        
if (c[0* c[1* c[2<= 100 * (c[0* c[1+ c[1* c[2+ c[2* c[0])) {
            printf(
"%d\n", s);
        }
 else {
            ans 
= 0;
            cc 
= max(0, s - 100);//一定要有这一句  -100可能是因为 0.01*100=1  但是具体我退不出
            ccc = c[0* c[1+ c[1* c[2+ c[2* c[0];
            d[
0= cc * c[1* c[2/ ccc;//最后再除的
            d[1= cc * c[2* c[0/ ccc;
            d[
2= cc * c[0* c[1/ ccc;
            
for (int i = 0; i < 3++i) {
                e[i] 
= d[i] * c[i] / 100;
            }

            
for (int i = d[0+ d[1+ d[2]; i <= s; ++i) {
                
int k = min_element(e, e + 3- e;
                ans 
= max(ans, e[k] - i);
                
++d[k];
                e[k] 
= d[k] * c[k] / 100;
            }

            printf(
"%d\n", s + ans);
        }

    }


    
return 0;
}



3355 判断是否稳赚不赔
ax>x+y+z
by>x+y+x
cz>x+y+z
推出  1/a+1/b+1/c<1  注意是必要条件

同时如果上式成立,那么按b*c, c*a, a*b的比率去押注,就可以做到稳赚不赔,所以也是充分条件。