#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct eleva{
int id;
int val;
};
int N, A, B;
eleva k[205]{0};
void bfs();
int visited[205]{0};
int ans = 0,flag=0;
queue<eleva> p;
int main(void) {
memset(visited, -1, sizeof(visited));
cin >> N >> A >> B;
for (int i = 1; i <= N; i++) {
cin >> k[i].val;
k[i].id = i;
}
p.push(k[A]);
bfs();
if (visited[B] != -1)
cout << ans << endl;
else
cout << -1 << endl;
return 0;
}
void bfs() {
while (!p.empty()) {
eleva a = p.front();//获得拓展
p.pop();
if (a.id == B)break;
if (visited[a.id] != -1) //访问过了
continue;
if (a.id + a.val > N && a.id - a.val < 1)continue;
if (a.id + a.val <= N) {
visited[a.id + a.val] = 1;
p.push(k[a.id + a.val]);
}
if (a.id - a.val >= 1) {
visited[a.id - a.val] = 1;
p.push(k[a.id - a.val]);
}
ans++;
}
return;
}