#include<cstring>
#include<queue>
using namespace std;
struct node{
int x,num;
};
const int N=203;
bool visited[N+2];
int k[N+2];
int n;
int d;
int bfs(int v){
queue<node>q;
node ans,t;
int x;
ans.x=v;
ans.num=0;
q.push(ans);
visited[v]=true;
while(!q.empty()){
t=q.front();
q.pop();
x=t.x+k[t.x];
if(x<1 || x>n);
else if(!visited[x]){
visited[x]=true;
ans.x=x;
ans.num=t.num+1;
q.push(ans);
if(ans.x==d)
return ans.num;
}
x=t.x-k[t.x];
if(x<1 || x>n);
else if(!visited[x]){
visited[x]=true;
ans.x=x;
ans.num=t.num+1;
q.push(ans);
if(ans.x==d)
return ans.num;
}
}
return -1;
}
int main(){
int s;
while(cin>>n){
if(n==0) break;
cin>>s>>d;
for(int i=1;i<=n;i++)
cin>>k[i];
if(s==d){
cout<<0<<endl;
continue;
}
memset(visited,false,sizeof(visited));
cout<<bfs(s)<<endl;
}
//system("pause");
return 0;
}