#include <iostream>
using namespace std;
int ans=0xfffff,n,a,b,flr[200+1];
bool g={1};
void dfs(int high,int times){
if (high==b){
ans=min(ans,times);
return;
}
if (g[high-1]==0){
return;
}
g[high-1]=0;
if (high+flr[high-1]<=b&&(high+flr[high-1]==b||g[high+flr[high-1]-1])){
dfs(high+flr[high-1],times+1);
}
if (high-flr[high-1]>0&&(high-flr[high-1]==b||g[high-flr[high-1]-1])){
dfs(high-flr[high-1],times+1);
}
return;
}
int main()
{
cin>>n>>a>>b;
for (int i=0;i<n;i++){
cin>>flr[i];
}
dfs(a,0);
if (ans==0xfffff){
cout<<-1;
}else{
cout<<ans;
}
//200 162 78
//40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 0 0 0 0 0 0 0 0 0 0 0 0 90 1 1 93 2 5 1 7 4 9 1 11 2 13 1 15 8 17 1 19 2 21 1 23 4 25 1 27 2 29 1 31 16 33 1 35 2 37 1 39 4 41 1 43 2 45 1 47 8 49 1 51 2 53 1 55 4 57 1 59 2 61 1 63 0 0 0 0 0 0 0
//82
//200 68 200
//68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 68 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 67 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
//-1
return 0;
}