#include #define fo(i,a,b) for(int i=a;i<=b;++i) #define fod(i,a,b) for(int i=a;i>=b;--i) #define max(q,w) ((q)>(w)?(q):(w)) #define min(q,w) ((q)<(w)?(q):(w)) using namespace std; typedef long long LL; const int N=200500; const LL INF=1e18; int read(int &n) { int q=1;n=0;char ch=' '; for(;ch!='-'&&(ch<'0'||ch>'9');ch=getchar()); if(ch=='-')q=-1,ch=getchar(); for(;ch<='9'&&ch>='0';ch=getchar())n=(n<<1)+(n<<3)+ch-48; return n; } int n,m,ans; int a[N],b[N][3]; int B[N*5][3],A[9][4],B0; int zx[N][9],zx1[N][9]; void link(int q,int q1,int w) { ++q1; if(q1<0)return; B[++B0][0]=A[q][q1],B[A[q][q1]][2]=B0,A[q][q1]=B0,B[B0][1]=w; zx[w][q]=B0;zx1[w][q]=q1; } void ADD(int q) { int w=-b[q][a[q]]; fo(i,0,2)if(w+b[q][i]>-2&&w+b[q][i])link(a[q]*3+i,w+b[q][i],q); } void DLT(int q,int w,int e) { B[B[q][2]][0]=B[q][0]; B[B[q][0]][2]=B[q][2]; if(A[e][zx1[w][e]]==q)A[e][zx1[w][e]]=B[q][0]; } void change(int q,int w) { fo(i,0,8)if(zx[q][i])DLT(zx[q][i],q,i),zx[q][i]=0; a[q]=w; ADD(q); } int main() { int q,w,e,_; read(_); while(_--) { read(n);read(q),read(w),read(e); fo(i,1,n) { int t; read(t); b[i][t%10]=1; b[i][t/10%10]=2; b[i][t/100%10]=3; if(q)a[i]=0,--q; else if(w)a[i]=1,--w; else a[i]=2,--e; ADD(i); } for(bool OK=1;OK;) { OK=0; fo(i,0,2)fo(j,0,2)if(A[i*3+j][3]) { for(int k=A[i*3+j][3];k;k=B[k][0]) { if(A[j*3+i][2]) { change(B[k][1],j); change(B[A[j*3+i][2]][1],i); OK=1; }else if(A[j*3+i][0]) { change(B[k][1],j); change(B[A[j*3+i][0]][1],i); OK=1; } } } fo(i,0,2)fo(j,0,2)if(A[i*3+j][2]&&A[j*3+i][2]) { change(B[A[i*3+j][2]][1],j); change(B[A[j*3+i][2]][1],i); OK=1; } fo(i,0,2)fo(j,0,2)if(A[i*3+j][3]&&A[j*3+i][3]) { change(B[A[i*3+j][3]][1],j); change(B[A[j*3+i][3]][1],i); OK=1; } // } // for(bool OK=1;OK;) // { // OK=0; fo(i,0,2)fo(j,0,2)fo(k,0,2)if(A[i*3+j][2]&&A[j*3+k][2]&&A[k*3+i][0]) { change(B[A[i*3+j][2]][1],j); change(B[A[j*3+k][2]][1],k); change(B[A[k*3+i][0]][1],i); OK=1; } fo(i,0,2)fo(j,0,2)fo(k,0,2)if(A[i*3+j][2]&&A[j*3+k][2]&&A[k*3+i][2]) { change(B[A[i*3+j][2]][1],j); change(B[A[j*3+k][2]][1],k); change(B[A[k*3+i][2]][1],i); OK=1; } } ans=0; fo(i,1,n)ans+=b[i][a[i]]; printf("%d\n",ans); fo(i,0,8)fo(j,0,3)A[i][j]=0; fo(i,1,B0)B[i][0]=B[i][1]=B[i][2]=0; fo(i,1,n)fo(j,0,8)zx[i][j]=0; B0=0; // fo(i,1,n)printf("%d\n",a[i]); } return 0; }