1 /*Author:WNJXYK*/
2 #include<cstdio>
3 #include<algorithm>
4 using namespace std;
5
6 int n,st,ed;
7 struct line{
8 int left,right;
9 int w;
10 }cow[10005];
11 bool cmp(line a,line b){
12 if (a.left<b.left) return true;
13 return false;
14 }
15 inline int remin(int a,int b){
16 if (a<b) return a;
17 return b;
18 }
19 inline int remax(int a,int b){
20 if (a>b) return a;
21 return b;
22 }
23
24 const int Maxn=86400;
25 const int Inf=2000000000;
26 struct Btree{
27 int left,right;
28 int min;
29 int tag;
30 }tree[Maxn*4+10];
31
32 void build(int x,int left,int right){
33 tree[x].left=left;
34 tree[x].right=right;
35 tree[x].tag=Inf;
36 if (left==right){
37 tree[x].min=(left<st?0:Inf);
38 }else{
39 int mid=(left+right)/2;
40 build(x*2,left,mid);
41 build(x*2+1,mid+1,right);
42 tree[x].min=remin(tree[x*2].min,tree[x*2+1].min);
43 }
44 }
45
46 inline void clean(int x){
47 if (tree[x].left!=tree[x].right){
48 tree[x*2].min=remin(tree[x].tag,tree[x*2].min);
49 tree[x*2].tag=remin(tree[x].tag,tree[x*2].tag);
50 tree[x*2+1].min=remin(tree[x].tag,tree[x*2+1].min);
51 tree[x*2+1].tag=remin(tree[x].tag,tree[x*2+1].tag);
52 tree[x].tag=Inf;
53 }
54 }
55
56 void change(int x,int left,int right,int val){
57 clean(x);
58 if (left<=tree[x].left && tree[x].right<=right){
59 tree[x].tag=remin(tree[x].tag,val);
60 tree[x].min=remin(tree[x].min,val);
61 }else{
62 int mid=(tree[x].left+tree[x].right)/2;
63 if (left<=mid) change(x*2,left,right,val);
64 if (right>=mid+1)change(x*2+1,left,right,val);
65 tree[x].min=remin(tree[x*2].min,tree[x*2+1].min);
66 }
67 }
68
69 int query(int x,int left,int right){
70 clean(x);
71 if (left<=tree[x].left && tree[x].right<=right){
72 return tree[x].min;
73 }else{
74 int Ans=Inf;
75 int mid=(tree[x].left+tree[x].right)/2;
76 if (left<=mid) Ans=remin(Ans,query(x*2,left,right));
77 if (right>=mid+1) Ans=remin(Ans,query(x*2+1,left,right));
78 return Ans;
79 }
80 }
81
82
83 int main(){
84 scanf("%d%d%d",&n,&st,&ed);
85 int delta=0;
86 if (st<1)delta=1-st;
87 st+=delta;
88 ed+=delta;
89 build(1,0,ed);
90 for (int i=1;i<=n;i++){
91 scanf("%d%d%d",&cow[i].left,&cow[i].right,&cow[i].w);
92 cow[i].left+=delta;
93 cow[i].right+=delta;
94 }
95 sort(cow+1,cow+n+1,cmp);
96 for (int i=1;i<=n;i++){
97 int mindist=query(1,remax(cow[i].left-1,0),cow[i].right)+cow[i].w;
98 //printf("mindist:%d\n",mindist);
99 //printf("query %d %d -> min=%d\n",remax(cow[i].left-1,0),cow[i].right,query(1,cow[i].left,cow[i].right));
100 change(1,cow[i].left,cow[i].right,mindist);
101 }
102 //printf("query min=%d\n",query(1,ed,ed));
103 int ans=query(1,ed,ed);
104 if (ans==Inf)
105 printf("-1\n");
106 else
107 printf("%d\n",ans);
108 return 0;
109 }