#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,cnt,ord,s,t;
ll h[100005],d[2005],minn[1005];
bool vis[100005];
vector<ll> cn[1005];
priority_queue<pair<ll,ll> > q;
struct edge{
ll to,ne,w;
}e[1000005];
struct board{
ll le,ri,he;
}b[1000005];
void add(ll x,ll y,ll z){
e[++cnt].to=y;
e[cnt].w=z;
e[cnt].ne=h[x];
h[x]=cnt;
}
void diji(ll p){
q.push({0,p});
d[p]=0;
while(!q.empty()){
ll u=q.top().second;
q.pop();
if(vis[u])
continue;
vis[u]=1;
for(int i=h[u];i;i=e[i].ne){
ll v=e[i].to;
if(d[v]>d[u]+e[i].w){
d[v]=d[u]+e[i].w;
q.push({-d[v],v});
}
}
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>s>>t;
for(int i=1;i<=n;i++)
cin>>b[i].le>>b[i].ri>>b[i].he;
for(int i=1;i<=n;i++){
add(ord+1,ord+2,b[i].ri-b[i].le);
add(ord+2,ord+1,b[i].ri-b[i].le);
ord+=2;
}
for(int i=1;i<=n;i++)
minn[i]=1145141919;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)
continue;
if(b[i].he>b[j].he){
if(b[j].le<=b[i].le&&b[i].le<=b[j].ri){
if(b[i].he-b[j].he==minn[i])
cn[i].push_back(j);
if(b[i].he-b[j].he<minn[i]){
minn[i]=b[i].he-b[j].he;
cn[i].clear();
cn[i].push_back(j);
}
}
if(b[j].le<=b[i].ri&&b[i].ri<=b[j].ri){
if(b[i].he-b[j].he==minn[i])
cn[i].push_back(j);
if(b[i].he-b[j].he<minn[i]){
minn[i]=b[i].he-b[j].he;
cn[i].clear();
cn[i].push_back(j);
}
}
}
}
}
for(int i=1;i<=n;i++){
ll k=cn[i].size();
for(int c=0;c<k;c++){
ll j=cn[i][c];
if(b[j].le<=b[i].le&&b[i].le<=b[j].ri){
if(j==t){
add(i*2-1,j*2-1,b[i].he-b[j].he);
add(i*2-1,j*2,b[i].he-b[j].he);
}else{
add(i*2-1,j*2-1,b[i].le-b[j].le+b[i].he-b[j].he);
add(i*2-1,j*2,b[j].ri-b[i].le+b[i].he-b[j].he);
}
}
if(b[j].le<=b[i].ri&&b[i].ri<=b[j].ri){
if(j==t){
add(i*2,j*2-1,b[i].he-b[j].he);
add(i*2,j*2,b[i].he-b[j].he);
}else{
add(i*2,j*2-1,b[i].ri-b[j].le+b[i].he-b[j].he);
add(i*2,j*2,b[j].ri-b[i].ri+b[i].he-b[j].he);
}
}
}
}
for(int i=1;i<=n*2;i++)
d[i]=1145141919;
diji(s*2-1);
if(d[2*t]==1145141919)
cout<<-1<<"\n";
else
cout<<min(d[2*t],d[2*t-1])<<"\n";
return 0;
}