#include<bits/stdc++.h>
using namespace std;
int n,b,a,k[1003],step1[1003],ans=INT_MAX;//n,b,a,k, step1是到这一层最少步数 ans是到这b层最少步数
void dfs(int x,int step){//x是当前层数 step是当前步数
if(x==a)
{
ans=min(ans,step);// 最少步数
return;
}
int tx;//tx是电梯可以到的层数
tx=x+k[x];//向上
if(tx>0&&tx<=n&&(step<step1[tx]||step1[tx]==0)){//tx是否在舞台上 是否是最少步数
//cout<<endl;
dfs(tx,step+1);
}
tx=x-k[x];//向下
if(tx>0&&tx<=n&&(step<step1[tx]||step1[tx]==0)){//tx是否在舞台上 是否是最少步数
//cout<<endl;
dfs(tx,step+1);
}
}
int main(){
cin>>n>>b>>a;
for(int i=1;i<=n;i++)
{
cin>>k[i];
}
dfs(b,0);//从b层开始 第0步
if(ans!=0) cout<<ans;
else cout<<"-1";//不可到达
return 0;
}
/**************************************************************
Problem: 1819
User: wuyunfeng
Language: C++
Result: Memory Limit Exceed
****************************************************************/