#include<bits/stdc++.h>
using namespace std;
long long f[14514],ff[14514],fff[70888];
long long head=0,tail=1;//模拟队列初始化
int main(){
long long floor,first_f,last_f;
cin>>floor>>first_f>>last_f;
if(first_f==last_f){
cout<<0;
return 0;
}
for( long long i=1;i<=floor;i++){
cin>>f[i];
fff[i]=-1;//每一层都没有使用
}
fff[first_f]=0;//当前层数出始化为0
ff[1]=first_f;//队列位置
//初始化待定
while(head<tail){
head++;//队列头增加
long long go=fff[ff[head]]+1;//当前步数加1
long long up_floor=f[ff[head]]+ff[head];//电梯上行的层数
long long under_floor=ff[head]-f[ff[head]];//电梯下行层数
if(up_floor>=1&&up_floor<=floor&&fff[up_floor]==-1){
tail++;//满足条件,尾巴增长
ff[tail]=up_floor;
fff[ff[tail]]=go;
if(ff[tail]==last_f){
cout<<go;
return 0;
}
}
else if(under_floor>=1&&under_floor<=floor&&fff[under_floor]==-1){
tail++;
ff[tail]=under_floor;
fff[ff[tail]]=go;
if(ff[tail]==last_f){
cout<<go;
return 0;
}
}
}
cout<<-1;
return 0;
}