#include <bits/stdc++.h>
using namespace std;
queue<int> q;
int dir[210];//当前层可走的步数
int bu[210];//记录每层的步数
bool f[210];//表示每层是否访问
int main()
{
int n,a,b;
cin>>n>>a>>b;//层数,开始位置,终止位置
if(a == b){
}
for(int i = 1;i <= n;i++){
cin>>dir[i];
}
memset(bu, -1, sizeof(a));
memset(f, false, sizeof(f));
bu[a] = 0;
f[a] = true;
q.push(a);
while(!q.empty()){
int x = q.front();
q.pop();
if (x == b) break; //没有加跳出,把所有的点全部都算出来了,白白浪费时间
if(dir[x] == 0) continue;//当前楼层只能走0步
if(x+dir[x]<=n && !f[x+dir[x]]){//忘记判断是否访问过,瞎几把搜
f[x+dir[x]] = true;
bu[x+dir[x]] = bu[x]+1;
q.push(x+dir[x]);
//cout<<"+"<<endl;
}
if(x-dir[x]>=1 && !f[x-dir[x]]){
//cout<<x-dir[x]<<endl;
f[x-dir[x]] = true;
bu[x-dir[x]] = bu[x]+1;
q.push(x-dir[x]);
//cout<<"-"<<endl;
}
//cout<<q.front()<<endl;
}
if(a == b){
cout<<0<<endl;
return 0;
}
/*if(bu[b] != 0)//bu初始化是-1,结果为0代表着只走了一步就达到终点
cout<<bu[b]<<endl;
else
cout<<-1<<endl;*/
cout<<bu[b]<<endl;
return 0;
}