void solve(std::istream& in, std::ostream& out) {
		static int testNumber = 0;
		++testNumber;
		std::cerr << testNumber << endl;

		int n;
		in >> n;

		int cnt = 0;
		priority_queue<Elem> pq;
		for (int i = 0; i < n; ++i) {
			int d, m, h;
			in >> d >> h >> m;
			cnt += h;
			for (int i: range(h)) {
				int time = m + i;
				Elem e = {true, time * 360LL, time * (360LL - d)};
				pq.push(e);
			}
		}

		int cur = cnt;
		int ans = cnt;
		int need = cnt;
		cerr << cnt << endl;
		while(true) {
			Elem e = pq.top();
			pq.pop();
			if(e.first) {
				--cur;
				--need;
			}
			else
				++cur;
			if(cur - need > ans)
				break;
			e.first = false;
			e.val += e.add;
			pq.push(e);
			ans = min(ans, cur);
		}

		out << "Case #" << testNumber << ": " << ans << "\n";

	}