//UVA437TheTowerOfBabylon
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 30 + 5;
int n;
int blocks[MAXN][MAXN], d[MAXN][MAXN];
void get_basedimension(int* v, int a, int b) {
int idx = 0;
for(int i = 0; i < 3; i++) {
if(i != b) v[idx++] = blocks[a][i];
}
}
int dp(int a, int b) {//以(a,b)为底
int& ans = d[a][b];
if(ans > 0) return ans;//记忆化搜索
ans = 0;
int v[3], v2[3];
get_basedimension(v, a, b);
for(int i = 0; i < n; i++) {
for(int j = 0; j < 3; j++) {
get_basedimension(v2, i, j);
if(v2[0] > v[0] && v2[1] > v[1]) ans = max(ans, dp(i, j));
}
}
ans += blocks[a][b];
return ans;
}
int main() {
int kase = 0;
while(scanf("%d", &n) == 1 && n) {
memset(d, 0, sizeof(d));
for(int i = 0; i < n; i++) {
for(int j = 0; j < 3; j++) scanf("%d", &blocks[i][j]);
sort(blocks[i], blocks[i] + 3);
}
int ans = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < 3; j++) {
ans = max(ans, dp(i, j));//以第i个块为顶层块,其j列元素为高建立最大的柱子
}
}
printf("Case %d: maximum height = %d\n", ++kase, ans);
}
return 0;
}
/*
1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0
*/