#include #include #include using namespace std; long A,B,C,X,Y,Z,W; long solve() { long ans=0; for(long a=0;a<=A&&a<=B;a++) { long rd=min(min(A-a,B-a),C); long mid=max(0L,A+B-2*a-C); if(mid<=rd) { //mid<=d<=rd -> (A-a-d)*Z+(B-a-d)*Y+dW=(A-a)*Z+(B-a)*Y+d*(W-Z-Y); long d=W-Z-Y>=0?rd:mid; ans=max(ans,a*X+(A-a-d)*Z+(B-a-d)*Y+d*W); } if(0 max(0,C-B+a)<=c<=min(A-a,C)-d long rd=min(A-a,C)-max(0L,C-B+a); assert(rd>=0); //0<=d<=rd { long x=min(C,A-a); //c=min(C,A-a)-d=x-d //c(Z-Y)+CY+d(W-Y)=(x-d)(Z-Y)+CY+d(W-Y)=x(Z-Y)+CY+d(W-Z) if(W>=Z)ans=max(ans,a*X+x*(Z-Y)+C*Y+rd*(W-Z)); else ans=max(ans,a*X+x*(Z-Y)+C*Y); } { long x=max(0L,C-B+a); //c=max(0,C-B+a)=x //c(Z-Y)+CY+d(W-Y)=x(Z-Y)+CY+d(W-Y) if(W>=Y)ans=max(ans,a*X+x*(Z-Y)+C*Y+rd*(W-Y)); else ans=max(ans,a*X+x*(Z-Y)+C*Y); } } } return ans; } long naive() { long ans=0; for(long a=0;a<=A;a++)for(long b=0;a+b<=B;b++)for(long c=0;a+c<=A&&b+c<=C;c++) { long d=min(A-a-c,min(B-a-b,C-b-c)); ans=max(ans,a*X+b*Y+c*Z+d*W); } return ans; } int main() { /* mt19937 rng(114514); for(A=0;A<=10;A++)for(B=0;B<=10;B++)for(C=0;C<=10;C++) { for(int tm=0;tm<100;tm++) { X=rng()%(int)1e9+1; Y=rng()%(int)1e9+1; Z=rng()%(int)1e9+1; W=rng()%(int)1e9+1; if(solve()!=naive()) { cout<>T; for(;T--;) { cin>>A>>B>>C>>X>>Y>>Z>>W; cout<