#include <iostream>
#include <queue>
using namespace std;
int n,a,b,numbers[10001];//numbers数组尽量大一些。
struct node
{
int step,layer,num;
//step:按钮次数,layer:第几层,num:那层上的数字。
void cj(int a,int b,int c)//哈哈,偷懒。
{
step=a;
layer=b;
num=c;
}
};
void bfs()
{
queue<node>q;
node abc={0,1,numbers[1]};
q.push(abc);
int zancun;
node zancun2;
while(q.size()&&q.front().layer!=b)
{
//上楼。
zancun=q.front().layer+q.front().num;
if(zancun<=n)
{
abc.cj(q.front().step+1,zancun,numbers[zancun]);
q.push(abc);
}
//下楼。
zancun=q.front().layer-q.front().num;
if(zancun>=0)
{
abc.cj(q.front().step+1,zancun,numbers[zancun]);
q.push(abc);
}
zancun2=q.front();
q.pop();
}
if(q.empty())//所有楼层都走完,直接输出-1。
cout<<-1<<endl;
else
cout<<zancun2.step<<endl;
}
int main()
{
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
cin>>numbers[i];
bfs();
return 0;
}