#include #define N 100005 using namespace std; int n,a,b,c,ans; int last[4]; struct node{ int hv,o1,o2; }Q[4]; inline void Rd(int &res){ char c;res=0; while(c=getchar(),c<48); do res=(res<<3)+(res<<1)+(c^48); while(c=getchar(),c>47); return; } void init(){ memset(Q,0,sizeof(Q)); } /* 012, 021, 102, 120, 201, 210 */ void solve0(){ int h=0; for(int i=1;i<=3;i++)h+=(last[i]==0); if(h==3)return; if(last[1]==0){ if(last[2]>0){ int h1=min(Q[2].o2,-last[3]),h2=last[2]-h1; ans+=2*h1+h2; } else if(last[3]>0){ int h1=min(Q[3].o2,-last[2]),h2=last[3]-h1; ans+=2*h1+h2; } } else if(last[2]==0){ if(last[1]>0){ int h1=min(Q[1].o2,-last[3]),h2=last[1]-h1; ans+=2*h1+h2; } else if(last[3]>0){ int h1=min(Q[3].o1,-last[1]),h2=last[3]-h1; ans+=2*h1+h2; } } else if(last[3]==0){ if(last[1]>0){ int h1=min(Q[1].o1,-last[2]),h2=last[1]-h1; ans+=2*h1+h2; } else if(last[2]>0){ int h1=min(Q[2].o1,-last[1]),h2=last[2]-h1; ans+=2*h1+h2; } } } void solve1(){ if(last[1]>0){ int h1=min(-last[2],Q[1].o1)+min(-last[3],Q[1].o2),h2=last[1]-h1; ans+=2*h1+h2; } else if(last[2]>0){ int h1=min(-last[1],Q[2].o1)+min(-last[3],Q[2].o2),h2=last[2]-h1; ans+=2*h1+h2; } else if(last[3]>0){ int h1=min(-last[1],Q[3].o1)+min(-last[2],Q[3].o2),h2=last[3]-h1; ans+=2*h1+h2; } } void solve2(){ if(last[1]<0){ int h1=min(-last[1],min(last[2],Q[2].o1)+min(last[3],Q[3].o1)),h2=last[2]+last[3]-h1; ans+=2*h1+h2; } else if(last[2]<0){ int h1=min(-last[2],min(last[1],Q[1].o1)+min(last[3],Q[3].o2)),h2=last[1]+last[3]-h1; ans+=2*h1+h2; } if(last[3]<0){ int h1=min(-last[3],min(last[1],Q[1].o2)+min(last[2],Q[2].o2)),h2=last[1]+last[2]-h1; ans+=2*h1+h2; } } int main(){ int T; Rd(T); while(T--){ Rd(n); init(); Rd(Q[1].hv);Rd(Q[2].hv);Rd(Q[3].hv); for(int i=1;i<=n;i++){ char str[9]; scanf("%s",str); if(strcmp(str,"012")==0)Q[1].o1++; if(strcmp(str,"021")==0)Q[1].o2++; if(strcmp(str,"102")==0)Q[2].o1++; if(strcmp(str,"120")==0)Q[2].o2++; if(strcmp(str,"201")==0)Q[3].o1++; if(strcmp(str,"210")==0)Q[3].o2++; } ans=0; for(int i=1;i<=3;i++)ans+=3*min(Q[i].hv,Q[i].o1+Q[i].o2),last[i]=Q[i].o1+Q[i].o2-Q[i].hv; int h=0; bool key=0; for(int i=1;i<=3;i++){ if(last[i]==0)key=1; h+=(last[i]>0); } if(key)solve0(); else if(h==1)solve1(); else solve2(); printf("%d\n",ans); } return 0; }