rt
#include<bits/stdc++.h>
using namespace std;
const long long MAXN=100005;
long long n,l,r,f[MAXN],t[MAXN*4];
struct data
{
long long a,b,c;
}a[MAXN];
bool cmp(data a,data b)
{
return a.b<b.b;
}
void pushup(long long x)
{
t[x]=min(t[x*2],t[x*2+1]);
}
void BuildTree(long long p,long long l,long long r)
{
if(l==r)
{
t[p]=f[l];
return;
}
long long mid=(l+r)/2;
BuildTree(p*2,l,mid);
BuildTree(p*2+1,mid+1,r);
pushup(p);
}
void Update(long long p,long long x,long long v,long long L,long long R)
{
if(L==R)
{
t[p]=v;
return;
}
long long mid=(L+R)/2;
if(x<=mid) Update(p*2,x,v,L,mid);
else Update(p*2+1,x,v,mid+1,R);
pushup(p);
}
long long inquire(long long p,long long l,long long r,long long L,long long R)
{
if(l<=L&&r>=R) return t[p];
long long mid=(L+R)/2;
long long val=INT_MAX;
if(l<=mid) val=min(val,inquire(p*2,l,r,L,mid));
if(r>mid) val=min(val,inquire(p*2+1,l,r,mid+1,R));
return val;
}
int main()
{
scanf("%lld%lld%lld",&n,&l,&r);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld%lld",&a[i].a,&a[i].b,&a[i].c);
}
sort(a+1,a+n+1,cmp);
memset(f,0x3f3f3f3f,sizeof(f));
f[l]=0;
BuildTree(1,l,r);
for(int i=1;i<=n;i++)
{
f[a[i].b]=min(f[a[i].b],inquire(1,a[i].a-1,a[i].b,l,r)+a[i].c);
Update(1,a[i].b,f[a[i].b],l,r);
if(a[i].b>=r)
{
if(f[a[i].b]==0x3f3f3f3f) printf("-1\n");
else printf("%lld\n",f[a[i].b]);
return 0;
}
}
return 0;
}