#include <bits/stdc++.h>
using namespace std;
struct stone {
int s;
int e;
int l;
} stones[104];
bool cmp(stone x, stone y){
if(x.l == 0)
return false;
if(y.l == 0)
return true;
return 1.0*x.s/x.l<1.0*y.s/y.l;
}
int n;
int dp[104][10004];
int knapsack(int item, int time){
if(item == n) return 0;
int& ret = dp[item][time];
if(ret != -1) return ret;
ret = max(knapsack(item+1,time),
stones[item].e-stones[item].l*time+knapsack(item+1,time+stones[item].s));
return ret;
}
int solve(){
cin>>n;
int t;
for(int i = 0 ; i < n;i++){
cin>>stones[i].s;
cin>>stones[i].e;
cin>>stones[i].l;
}
sort(stones,stones+n,cmp);
memset(dp, -1, sizeof(dp));
return knapsack(0,0);
}
int main() {
int TC;
cin>>TC;
for(int i = 1;i<=TC;i++)
cout<<"Case #"<<i<<": "<<solve()<<'\n';;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBzdG9uZSB7CglpbnQgczsKCWludCBlOwoJaW50IGw7Cn0gc3RvbmVzWzEwNF07CmJvb2wgY21wKHN0b25lIHgsIHN0b25lIHkpewoJaWYoeC5sID09IDApCgkJcmV0dXJuIGZhbHNlOwoJaWYoeS5sID09IDApCgkJcmV0dXJuIHRydWU7CglyZXR1cm4gMS4wKngucy94Lmw8MS4wKnkucy95Lmw7Cn0KaW50IG47CmludCBkcFsxMDRdWzEwMDA0XTsKaW50IGtuYXBzYWNrKGludCBpdGVtLCBpbnQgdGltZSl7CglpZihpdGVtID09IG4pCXJldHVybiAwOwoJaW50JiByZXQgPSBkcFtpdGVtXVt0aW1lXTsKCWlmKHJldCAhPSAtMSkJcmV0dXJuIHJldDsKCXJldCA9IG1heChrbmFwc2FjayhpdGVtKzEsdGltZSksCgkJCXN0b25lc1tpdGVtXS5lLXN0b25lc1tpdGVtXS5sKnRpbWUra25hcHNhY2soaXRlbSsxLHRpbWUrc3RvbmVzW2l0ZW1dLnMpKTsKCXJldHVybiByZXQ7Cn0KaW50IHNvbHZlKCl7CgljaW4+Pm47CglpbnQgdDsKCWZvcihpbnQgaSA9IDAgOyBpIDwgbjtpKyspewoJCWNpbj4+c3RvbmVzW2ldLnM7CgkJY2luPj5zdG9uZXNbaV0uZTsKCQljaW4+PnN0b25lc1tpXS5sOwoJfQoJc29ydChzdG9uZXMsc3RvbmVzK24sY21wKTsKCW1lbXNldChkcCwgLTEsIHNpemVvZihkcCkpOwoJcmV0dXJuIGtuYXBzYWNrKDAsMCk7Cn0KCmludCBtYWluKCkgewoJaW50IFRDOwoJY2luPj5UQzsKCWZvcihpbnQgaSA9IDE7aTw9VEM7aSsrKQoJCWNvdXQ8PCJDYXNlICMiPDxpPDwiOiAiPDxzb2x2ZSgpPDwnXG4nOzsKCQoJcmV0dXJuIDA7Cn0=