#include<iostream>
#include<queue>
using namespace std;
int n,a,b,ans = 0x3f3f3f3f;
int lift[205];
int visited[205];
struct Node
{
int floor;
int steps;
};
Node tnode,pnode;
queue<Node> qlist;
void bfs(int a,int b,int n)
{
tnode.floor = a;
tnode.steps = 0;
visited[a] = 1;
qlist.push(tnode);
while(!qlist.empty())
{
tnode = qlist.front();
qlist.pop();
if(tnode.floor == b)
{
ans = tnode.steps;
break;
}
if(tnode.floor + lift[tnode.floor] <= n)
{
if(visited[tnode.floor + lift[tnode.floor]] == 0)
{
pnode.floor = tnode.floor + lift[tnode.floor];
pnode.steps = tnode.steps + 1;
qlist.push(pnode);
}
}
if(tnode.floor - lift[tnode.floor] >= 1)
{
if(visited[tnode.floor - lift[tnode.floor]] == 0)
{
pnode.floor = tnode.floor - lift[tnode.floor];
pnode.steps = tnode.steps + 1;
qlist.push(pnode);
}
}
}
}
int main()
{
cin >> n >> a >> b;
for(int i = 1;i <= n;i++)
{
cin >> lift[i];
}
bfs(a,b,n);
if(ans == 0x3f3f3f3f)
{
cout << -1 << endl;
}
else
{
cout << ans << endl;
}
return 0;
}