#include<iostream>
#include<queue>
using namespace std;
struct lift{
int floor,times;
};
int n,a,b,k[100001];
bool flag=false,visited[100001];
queue<lift>que;
lift tmp;
int l(){
lift temp={a,0};
que.push(temp);
while(!que.empty()){
tmp=que.front();
que.pop();
if(tmp.floor==b)return tmp.times;
for(int i=-1;i<=1;i+=2){
int tmpf=tmp.floor+k[tmp.floor]*i;
if(tmpf>=1&&tmpf<=n&&!visited[tmpf]){
lift tmptmp={tmpf,tmp.times+1};
que.push(tmptmp);
visited[tmpf]=true;
}
}
}
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++)cin>>k[i];
visited[a]=true;
int ans=l();
if(tmp.floor==b)cout<<ans<<endl;
else cout<<-1<<endl;
return 0;
}