1 #include <cstring>
2 #include <algorithm>
3 #include <iostream>
4 #include <queue>
5
6 using namespace std;
7
8 typedef long long LL;
9 const int maxn = 1e5+10;
10 int T,N,cnt;
11 LL M;
12
13 struct node{
14 LL money,time;
15 node(){}
16 node(LL a,LL b){money=a;time=b;}
17 bool operator < (const node &b) const
18 {return time > b.time;}
19 };
20
21 struct item
22 {
23 LL V,R,time;
24 item(){}
25 item(LL a,LL b,LL c){V = a;R = b;time = c;}
26 bool operator < (const item &b) const
27 {return R < b.R;}
28 }items[maxn];
29
30 LL bfs()
31 {
32 priority_queue<node> pq;
33 node st(1,0),cur;
34 pq.push(st);
35 int i,x=1;
36 while(!pq.empty())
37 {
38 cur = pq.top();pq.pop();
39 if(cur.money >= M) return cur.time;
40 for(i=x;i<=cnt;i++)
41 {
42 if(cur.money < items[i].R) break;
43 if(cur.money>=items[i].R&&cur.money<items[i].V)
44 {
45 pq.push(node(items[i].V,cur.time+items[i].time));
46 }
47 }
48 x = i;
49 }
50 return -1;
51 }
52
53 int main()
54 {
55 cin >> T;
56 for(int cas=1;cas<=T;cas++)
57 {
58 cin >> N >> M;
59 LL v,r,t;
60 cnt=1;
61 for(int i=0;i<N;i++)
62 {
63 cin >> v >> r >> t;
64 if(v==r) continue;
65 items[cnt++] = item(v,r,t);
66 }
67 sort(items+1,items+cnt+1);
68 cout << "Case #"<<cas<<": "<<bfs()<<endl;
69 }
70 }