#include #define all(n) (n).begin(), (n).end() #define se second #define fi first #define pb push_back #define mp make_pair #define sqr(n) (n)*(n) #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) #define IO ios::sync_with_stdio(0); cin.tie(0); using namespace std; typedef long long ll; typedef pair PII; typedef pair PIII; typedef pair PLL; typedef vector VI; typedef double db; const int N = 1e5 + 5; int n, m, _, k; int a, b, c, d[3][2]; bool v[3]; char s[5]; void clear(int id, int& a) { m += (d[id][0] + d[id][1]) * 3; a -= (d[id][0] + d[id][1]); d[id][0] = d[id][1] = 0; v[id] = 0; } void work1(int a, int b, int c, int x, int y) { if (a >= x) m += (x << 1) + (a - x); else m += (a << 1); if (b >= y) m += (y << 1) + (b - y); else m += (b << 1); m += c * 3; } void work2(int a, int b, int x, int y) { if (b >= y) m += b * 3 + (x + y - b) * 2; else m += b * 3 + (y - b) + (x << 1); } int main() { IO; for (cin >> _; _; --_) { cin >> n >> a >> b >> c; v[0] = v[1] = v[2] = 1; memset(d, 0, sizeof d); rep(i, 1, n) { cin >> s; if (s[0] == '0') { if (s[1] == '1') ++d[0][0]; else ++d[0][1]; } else if (s[0] == '1') { if (s[1] == '0') ++d[1][0]; else ++d[1][1]; } else { if (s[1] == '0') ++d[2][0]; else ++d[2][1]; } } m = 0; if (a >= d[0][0] + d[0][1]) clear(0, a); if (b >= d[1][0] + d[1][1]) clear(1, b); if (c >= d[2][0] + d[2][1]) clear(2, c); if (!v[0] && !v[1] && !v[2]); else if (!v[0] && !v[1]) work1(a, b, c, d[2][0], d[2][1]); else if (!v[0] && !v[2]) work1(a, c, b, d[1][0], d[1][1]); else if (!v[1] && !v[2]) work1(b, c, a, d[0][0], d[0][1]); else if (!v[0]) work2(a, b, d[1][0], d[1][1]), work2(a, c, d[2][0], d[2][1]); else if (!v[1]) work2(b, a, d[0][0], d[0][1]), work2(b, c, d[2][1], d[2][0]); else work2(c, a, d[0][1], d[0][0]), work2(c, b, d[1][1], d[1][0]); cout << m << '\n'; } return 0; }