#include<iostream>
#include<queue>
using namespace std;
int k[205];
struct move
{
int x;
int step;
};
int a,b,n;
bool vis[205];
bool judgment(int i)
{
if(i>=0&&i<=n&&vis[i]!=true)
{
return true;
}
return false;
}
void bfs()
{
queue <move> q;
move item;
item.x=a;
item.step=0;
q.push(item);
vis[a]=true;
while(q.empty()==false)
{
move head=q.front();
q.pop();
if(head.x==b)
{
cout<<head.step<<endl;
return;
}
if(judgment(head.x+k[head.x]))
{
item.x=head.x+k[head.x];
item.step=head.step+1;
q.push(item);
vis[item.x]=true;
}
if(judgment(head.x-k[head.x]))
{
item.x=head.x-k[head.x];
item.step=head.step+1;
q.push(item);
vis[item.x]=true;
}
}
cout<<"-1"<<endl;
}
int main()
{
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
{
cin>>k[i];
}
if(a==b)
{
cout<<"0"<<endl;
return 0;
}
bfs();
return 0;
}