#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int N,A,B;
int op[205];
bool vis[205];
struct node
{
int x,d;
node(int xx,int dd)
{
x=xx;
d=dd;
}
};
int bfs(int x)
{
queue <node> q;
q.push(node(x,0));
vis[x]=1;
while(!q.empty())
{
node now=q.front();
if(now.x==B)
{
return now.d;
}
q.pop();
if(now.x+op[now.x]<=N&&!vis[now.x+op[now.x]])
{
vis[now.x+op[now.x]]=1;
q.push(node(now.x+op[now.x],now.d+1));
}
if(now.x-op[now.x]>=1&&!vis[now.x+op[now.x]])
{
vis[now.x-op[now.x]]=1;
q.push(node(now.x-op[now.x],now.d+1));
}
}
return -1;
}
int main()
{
cin>>N>>A>>B;
for(int i=1;i<=N;i++)
{
cin>>op[i];
}
cout<<bfs(A)<<endl;
return 0;
}