#include <set>
#include <array>
#include <vector>
#include <iostream>
using namespace std;
array<int, 4> type;
set<array<int, 4>> S;
vector g(3, vector<bool> (3));
void dfs(int L = 0) {
if (L < 4) {
dfs(L + 1);
int x = 1, y = 1;
if (L < 2) {
y += L;
} else {
x += 1;
y += L - 2;
}
if (!g[x][y] && !g[x - 1][y] && !g[x][y - 1]) {
type[3] += 1;
g[x][y] = 1;
g[x - 1][y] = 1;
g[x][y - 1] = 1;
dfs(L + 1);
type[3] -= 1;
g[x][y] = 0;
g[x - 1][y] = 0;
g[x][y - 1] = 0;
}
return;
}
if (L < 10) {
dfs(L + 1);
int x = 0, y = 0;
if (L < 7) {
y = L - 4;
} else {
x = 1;
y = L - 7;
}
if (!g[x][y] && !g[x + 1][y]) {
type[1] += 1;
g[x][y] = 1;
g[x + 1][y] = 1;
dfs(L + 1);
type[1] -= 1;
g[x][y] = 0;
g[x + 1][y] = 0;
}
return;
}
if (L < 16) {
dfs(L + 1);
int x = 0, y = 0;
if (L < 13) {
x = L - 10;
} else {
y = 1;
x = L - 13;
}
if (!g[x][y] && !g[x][y + 1]) {
type[1] += 1;
g[x][y] = 1;
g[x][y + 1] = 1;
dfs(L + 1);
type[1] -= 1;
g[x][y] = 0;
g[x][y + 1] = 0;
}
return;
}
if (L < 19) {
dfs(L + 1);
int x = 0, y = L - 16;
if (!g[x][y] && !g[x + 1][y] && !g[x + 2][y]) {
type[2] += 1;
g[x][y] = 1;
g[x + 1][y] = 1;
g[x + 2][y] = 1;
dfs(L + 1);
type[2] -= 1;
g[x][y] = 0;
g[x + 1][y] = 0;
g[x + 2][y] = 0;
}
return;
}
if (L < 22) {
dfs(L + 1);
int x = L - 19, y = 0;
if (!g[x][y] && !g[x][y + 1] && !g[x][y + 2]) {
type[2] += 1;
g[x][y] = 1;
g[x][y + 1] = 1;
g[x][y + 2] = 1;
dfs(L + 1);
type[2] -= 1;
g[x][y] = 0;
g[x][y + 1] = 0;
g[x][y + 2] = 0;
}
return;
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
type[0] += !g[i][j];
}
}
S.insert(type);
type[0] = 0;
}
const int N = 41;
int f[N][N][N][N];
inline void Max(int& a, int b) {
a = max(a, b);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
for (int i = 0; i < 4; i++) {
type[i] = 0;
}
dfs();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {
for (int l = 0; l < N; l++) {
if (i > 0) {
Max(f[i][j][k][l], f[i - 1][j][k][l]);
}
if (j > 0) {
Max(f[i][j][k][l], f[i][j - 1][k][l]);
}
if (k > 0) {
Max(f[i][j][k][l], f[i][j][k - 1][l]);
}
if (l > 0) {
Max(f[i][j][k][l], f[i][j][k][l - 1]);
}
for (auto [a, b, c, d] : S) {
if (a <= i && b <= j && c <= k && d <= l) {
Max(f[i][j][k][l], f[i - a][j - b][k - c][l - d] + 1);
}
}
}
}
}
}
int t;
cin >> t;
for (int i = 1; i <= t; i++) {
int a, b, c, d;
cin >> a >> b >> c >> d;
cout << "Case " << i << ": " << f[a][b][c][d] << '\n';
}
return 0;
}