#include using namespace std; #define mp make_pair #define pb push_back #define x first #define y second typedef pair pii; typedef long long ll; typedef unsigned long long ull; template void chkmax(T &x,T y){x void chkmin(T &x,T y){x>y?x=y:T();} template void readint(T &x) { x=0;int f=1;char c; for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1; for(;isdigit(c);c=getchar())x=x*10+c-'0'; x*=f; } /*const int MOD=; inline int dmy(int x){return x>=MOD?x-MOD:x;} inline void inc(int &x,int y){x=dmy(x+y);} int qmi(int x,int y) { int ans=1; for(;y;y>>=1,x=1ll*x*x%MOD) if(y&1)ans=1ll*ans*x%MOD; return ans; }*/ int y[3],x[6]; void solve() { memset(x,0,sizeof(x)); int N;char str[5]; readint(N);for(int i=0;i<3;++i)readint(y[i]); while(N--) { scanf("%s",str); if(str[0]=='0' && str[1]=='1')++x[0]; else if(str[0]=='0' && str[1]=='2')++x[1]; else if(str[0]=='1' && str[1]=='2')++x[2]; else if(str[0]=='1' && str[1]=='0')++x[3]; else if(str[0]=='2' && str[1]=='0')++x[4]; else if(str[0]=='2' && str[1]=='1')++x[5]; } if(x[2]+x[3]<=y[1])swap(y[0],y[1]),swap(x[0],x[3]),swap(x[1],x[2]),swap(x[4],x[5]); else if(x[4]+x[5]<=y[2])swap(y[0],y[2]),swap(x[0],x[5]),swap(x[1],x[4]),swap(x[2],x[3]); assert(x[0]+x[1]<=y[0]); if(x[4]+x[5]<=y[2])swap(y[1],y[2]),swap(x[0],x[1]),swap(x[2],x[5]),swap(x[3],x[4]); int ans=0; ans+=(x[0]+x[1])*3,y[0]-=x[0]+x[1]; if(x[2]+x[3]<=y[1]) { ans+=(x[2]+x[3])*3,y[1]-=x[2]+x[3]; if(y[0]>x[4])ans+=x[4]*2,y[0]-=x[4],ans+=3*y[2]+2*y[1]+y[0]; else if(y[1]>x[5])ans+=x[5]*2,y[1]-=x[5],ans+=3*y[2]+2*y[0]+y[1]; else ans+=(y[0]+y[1])*2+3*y[2]; printf("%d\n",ans); } else { int t=min(y[1],x[2]); ans+=3*t,y[1]-=t,x[2]-=t; t=min(y[2],x[5]); ans+=3*t,y[2]-=t,x[5]-=t; if(y[1])ans+=3*y[1],x[3]-=y[1],y[1]=0; if(y[2])ans+=3*y[2],x[4]-=y[2],y[2]=0; ans+=x[2]+x[5]+(x[3]+x[4])*2; printf("%d\n",ans); } } int main() { #ifdef LOCAL freopen("code.in","r",stdin); // freopen("code.out","w",stdout); #endif int T; readint(T); while(T--)solve(); return 0; }