#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int s[205];
int vis[205];
int n,a,b;
struct node{
int x;//当前层数
int step;//按的次数
};
int bfs(){
queue<node>q;
node c,next;
c.x=a;
c.step=0;
vis[c.x]=1;
int i;
q.push(c);
while(!q.empty()){
c=q.front();
q.pop();
if(c.x==b)return c.step;
next=c;
next.x=next.x+s[next.x];
if((vis[next.x]==0)&&(next.x>0)&&(next.x<=n)){
vis[next.x]=1;
next.step++;
q.push(next);
}
next=c;
next.x=next.x-s[next.x];
if((vis[next.x]==0)&&(next.x>0)&&(next.x<=n)){
vis[next.x]=1;
next.step++;
q.push(next);
}
}
return -1;
}
int main(){
while(scanf("%d",&n)!=EOF){
if(n==0)break;
scanf("%d%d",&a,&b);
int i;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++){
scanf("%d",&s[i]);
}
printf("%d\n",bfs());
}
return 0;
}