//贪心
#include<cstdio>
#include<algorithm>
using namespace std;
struct Brick
{
int x,y,z;//长宽高
}brick[200];
int ant;
void UpDate(int x,int y,int z)
{
brick[ant].x = x;
brick[ant].y = y;
brick[ant++].z = z;
}
bool cmp(Brick a,Brick b)
{
if (a.x == b.x)
return a.y > b.y;
return a.x > b.x;
}
int main()
{
int n;
int Case = 1;
while (~scanf ("%d",&n) && n){
ant = 1;
for (int i = 1 ; i <= n ; i++){
int x, y, z;
scanf ("%d%d%d",&x,&y,&z);
UpDate(x,y,z);
UpDate(y,x,z);
UpDate(z,x,y);
UpDate(z,y,x);
UpDate(x,z,y);
UpDate(y,z,x);
}
sort(brick+1, brick+ant,cmp);
int dp[200];
int ans = 0;
for (int i = 1 ; i < ant ; i++){
dp[i] = brick[i].z;
for (int j=1; j<i; j++){
if (brick[i].x<brick[j].x && brick[i].y < brick[j].y)
dp[i] = max(dp[i], dp[j] + brick[i].z);
ans = max(ans , dp[i]);
}
}
printf ("Case %d: maximum height = %d\n",Case++,ans);
}
return 0;
}