#include<bits/stdc++.h>
using namespace std;
int n,b,a,k[201],step1[201],ans=INT_MAX;//n,b,a,k,  step1是到这一层最少步数  ans是到这b层最少步数
int tx;//tx是电梯可以到的层数 
void dfs(int x,int step){//x是当前层数 step是当前步数 
	if(x==a)
	{
		ans=min(ans,step);// 最少步数 
		return;
	}
	tx=x+k[x];//向上 
	if(tx>0&&tx<=n&&(step<step1[tx]||step1[tx]==0)){//tx是否在舞台上 是否是最少步数 
		//cout<<endl;
		dfs(tx,step+1);
	}
	tx=x-k[x];//向下 
	if(tx>0&&tx<=n&&(step<step1[tx]||step1[tx]==0)){//tx是否在舞台上 是否是最少步数 
		//cout<<endl;
		dfs(tx,step+1);
	}
}
int main(){
	cin>>n>>b>>a;
	for(int i=1;i<=n;i++)
	{
		cin>>k[i];
	}
	dfs(b,0);//从b层开始 第0步 
	if(ans!=0) cout<<ans;
	else cout<<"-1";//不可到达 
	return 0;
	
}
/**************************************************************
	Problem: 1819
	User: wuyunfeng
	Language: C++
	Result: Memory Limit Exceed
****************************************************************/