#include #define debug(x) cerr<<#x<<" = "<0) printf("%d %d %d,%d\n",x,y,rem,d); nt[tmp]=fs[x],fs[x]=tmp,to[tmp]=y,len[tmp]=d,r[tmp++]=rem; nt[tmp]=fs[y],fs[y]=tmp,to[tmp]=x,len[tmp]=-d,r[tmp++]=0; } inline bool SPFA(){ for(int i=1;i<=T;i++) dis[i]=-INF,inq[i]=false; hd=tl=0,q[tl++]=S,dis[S]=0,inq[S]=true; for(int x=q[hd];hd-INF; } inline int mxf(int ret=0){ for(int mi=INF,cst=0;SPFA();ret+=mi*cst,mi=INF,cst=0){ for(int x=T;x!=S;x=to[las[x]^1]) cst+=len[las[x]],mi=min(mi,r[las[x]]); for(int x=T;x!=S;x=to[las[x]^1]) r[las[x]]-=mi,r[las[x]^1]+=mi; } return ret; } int hv[3],cnt[6]; int od[6][3]={{0,1,2},{0,2,1},{1,0,2},{1,2,0},{2,0,1},{2,1,0}}; int be[1000]; inline void solve(){ tmp=0,memset(fs,-1,sizeof(fs)),tmp=0,S=10,T=11,memset(cnt,0,sizeof(cnt)); n=read(),hv[0]=read(),hv[1]=read(),hv[2]=read(); for(int x=1;x<=n;x++) cnt[be[read()]]++; for(int a=0;a<3;a++) for(int b=0;b<6;b++) for(int i=0;i<3;i++) if(od[b][i]==a) add(a+1,b+4,INF,3-i); for(int a=0;a<3;a++) add(S,a+1,hv[a],0); for(int b=0;b<6;b++) add(b+4,T,cnt[b],0); int ans=mxf(); printf("%d\n",ans); } int main(){ be[12]=0,be[21]=1,be[102]=2,be[120]=3,be[201]=4,be[210]=5; for(int Cas=read();Cas;--Cas) solve(); return 0; }