//dfs 深度优先遍历
//bfs 宽度优先遍历
//点 边
//1 - n
// 邻接表 邻接矩阵
// n^2 边多 稠密图 邻接矩阵
// a b c
// a 0 1 0
// b 1 0 1
// c 1 0 0
// n m n == m 稀疏图 邻接表 vector存图
// a -> c -> d -> null
// b -> a -> null
// c -> d -> null
// d -> null
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
const int N = 210;
vector<int> es[N];
int d[N];
int n, a, b;
int bfs()
{
memset(d, -1, sizeof d);
d[a] = 0;
queue<int> q;//建立一个队列用来放边
q.push(a);
while (!q.empty())
{
int t = q.front();//取队列的头
q.pop();
if (t == b) return d[t];
for (int v : es[t])
{
if (d[v] != -1) continue;
d[v] = d[t] + 1;
q.push(v);
}
}
return -1;
}
int main()
{
scanf("%d%d%d", &n, &a, &b);
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &x);
if (i - x >= 1)
es[i].push_back(i - x);
if (i + x <= n)
es[i].push_back(i + x);
}
printf("%d", bfs());
return 0;
}