#include<iostream>
#include<queue>
#define N 210
using namespace std;
const int INF = -1;
int n;
int start;
int terminal;
int k[N];
int d[N];
int bfs()
{
queue<int> que;
for(int i = 1; i <= n; i++)
d[i] = INF;
que.push(start);
d[start] = 0;
while(que.size())
{
int p = que.front();
que.pop();
if(p == terminal)
break;
for(int i = 1; i <= n; i++)
{
int nx1 = p + k[i];
int nx2 = p - k[i];
if(nx1 <= n && d[nx1] == INF)
{
que.push(nx1);
d[nx1] = d[p] + 1;
}
if(nx2 >= 1 && d[nx2] == INF)
{
que.push(nx2);
d[nx2] = d[p] + 1;
}
}
}
return d[terminal];
}
int main()
{
cin >> n >> start >> terminal;
for(int i = 1; i <= n; i++)
cin >> k[i];
int ans = bfs();
for(int i = 1; i <= n; i++)
cout << d[i] << " ";
cout << endl;
cout << ans;
return 0;
}