//Δ_1005 #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef double DB; const int N = 1111; const int inf = 1e9; struct edge{ int pr; int to; int ca; int co; }e[111111]; int tot=1,la[N]; void clr(){ tot=1; memset(la,0,sizeof(la)); } void adde(int x,int y,int z,int w){ e[++tot].pr=la[x]; la[x]=tot; e[tot].to=y; e[tot].ca=z; e[tot].co=w; } void addf(int x,int y,int z=inf,int w=0){ adde(x,y,z,w); adde(y,x,0,-w); } int ss,d[N],f[N]; queue q; int spfa(int s,int t){ int i,x,y; for(i=0;i<=10;i=i+1) d[i]=inf,f[i]=0; d[s]=0; q.push(s); while(!q.empty()){ x=q.front(); q.pop(); for(i=la[x];i;i=e[i].pr){ if(!e[i].ca) continue; y=e[i].to; if(d[y]>d[x]+e[i].co){ d[y]=d[x]+e[i].co; f[y]=i; q.push(y); } } } if(d[t]>=inf) return 0; y=inf; for(x=t;x!=s;x=e[i^1].to){ i=f[x]; y=min(y,e[i].ca); } ss+=y*d[t]; for(x=t;x!=s;x=e[i^1].to){ i=f[x]; e[i].ca-=y; e[i^1].ca+=y; } return 1; } int r[11]; char ch[11]; string s[6]={"012","021","102","201","120","210"}; int main() { int T,n,a,b,c,i,j,x; scanf("%d",&T); while(T--){ scanf("%d%d%d%d",&n,&a,&b,&c); for(i=0;i<6;i=i+1) r[i]=0; for(i=1;i<=n;i=i+1){ scanf("%s",ch); x=(ch[0]-'0')*2+(ch[1]>ch[2]); r[x]++; } clr(); addf(9,6,a),addf(9,7,b),addf(9,8,c); for(i=0;i<6;i=i+1){ addf(i,10,r[i]); for(j=0;j<3;j=j+1) addf(j+6,i,inf,s[i][j]-'0'); } ss=0; while(spfa(9,10)); printf("%d\n",3*n-ss); } return 0; }