#include <bits/stdc++.h>
using namespace std;
struct Floor{
int x;
int step;
Floor(int xx,int stepp):x(xx),step(stepp){}
};
int main()
{
int ans=-1;
int n,a,b;
int s[250];
bool vis[250];
memset(vis,0,sizeof(vis));
memset(s,0,sizeof(s));
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
}
queue<Floor> q;
q.push(Floor(a,0));
vis[a]=1;
while(!q.empty())
{
Floor f=q.front();q.pop();
//cout<<f.x<<" "<<f.step<<endl;
if(f.x==b){ans=f.step;break;}
if(s[f.x]+f.x<=n&&(!vis[s[f.x]+f.x])) {vis[s[f.x]+f.x]=1;q.push(Floor(s[f.x]+f.x,f.step+1));}
if(f.x-s[f.x]>0&&(!vis[f.x-s[f.x]])) {vis[s[f.x]-f.x]=1;q.push(Floor(f.x-s[f.x],f.step+1));}
}
cout<<ans<<endl;
return 0;
}