#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<fstream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#define PI acos(-1.0)
typedef long long LL;
const int MAX=0xfffffff;
using namespace std;
int n,a,b;
int num[220];
int vis[220];
struct node {
int step,num;
};
node p1,q;
void bfs()
{
memset(vis,0,sizeof(vis));
queue<node> Q;
q.num=a;
q.step=0;
vis[q.num]=1;
Q.push(q);
while(!Q.empty())
{
q=Q.front(),Q.pop();
if(q.num==b)
{
printf("%d\n",q.step);
return ;
}
p1.num=q.num+num[q.num];
if(p1.num>=1&&p1.num<=b&&!vis[p1.num])
{
p1.step=q.step+1;
Q.push(p1);
vis[p1.num]=1;
}
p1.num=q.num-num[q.num];
if(p1.num>=1&&p1.num<=b&&!vis[p1.num])
{
p1.step=q.step+1; //开始直接写的p1.step+=1,WA了一次
Q.push(p1);
vis[p1.num]=1;
}
}
printf("-1\n");
}
int main( )
{
//freopen("1.txt","r",stdin);
while(scanf("%d",&n)&&n)
{
scanf("%d%d",&a,&b);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
bfs();
}
return 0;
}
#include<cmath>
#include<cstring>
#include<cstdio>
#include<fstream>
#include<algorithm>
#include<string>
#include<stack>
#include<queue>
#include<map>
#define PI acos(-1.0)
typedef long long LL;
const int MAX=0xfffffff;
using namespace std;
int n,a,b;
int num[220];
int vis[220];
struct node {
int step,num;
};
node p1,q;
void bfs()
{
memset(vis,0,sizeof(vis));
queue<node> Q;
q.num=a;
q.step=0;
vis[q.num]=1;
Q.push(q);
while(!Q.empty())
{
q=Q.front(),Q.pop();
if(q.num==b)
{
printf("%d\n",q.step);
return ;
}
p1.num=q.num+num[q.num];
if(p1.num>=1&&p1.num<=b&&!vis[p1.num])
{
p1.step=q.step+1;
Q.push(p1);
vis[p1.num]=1;
}
p1.num=q.num-num[q.num];
if(p1.num>=1&&p1.num<=b&&!vis[p1.num])
{
p1.step=q.step+1; //开始直接写的p1.step+=1,WA了一次
Q.push(p1);
vis[p1.num]=1;
}
}
printf("-1\n");
}
int main( )
{
//freopen("1.txt","r",stdin);
while(scanf("%d",&n)&&n)
{
scanf("%d%d",&a,&b);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
bfs();
}
return 0;
}