#include #define ll long long #define ull unsigned long long #define dl double #define st first #define nd second #define II pair using namespace std; const int N = 5 + 1e5; const int inf = 7 + 1e9; int main() { #define TASKNAME "" ios_base :: sync_with_stdio (0); cin.tie (0); if ( fopen( TASKNAME".inp", "r" ) ) { freopen (TASKNAME".inp", "r", stdin); freopen (TASKNAME".out", "w", stdout); } int n, s, t, k; cin >> n >> s >> t >> k; vector a(n + 1, 0); vector b; for (int i = 1; i <= n; i ++) { cin >> a[i]; b.push_back({a[i], i}); } sort(b.begin(), b.end(), greater <> ()); vector ans(n + 1, inf); ans[s] = 1; queue q; q.push(s); ans[s] = 0; while (!q.empty()) { int u = q.front(); q.pop(); int val = k - a[u]; while (!b.empty() && b.back().st <= val) { int v = b.back().nd; b.pop_back(); q.push(v); ans[v] = ans[u] + 1; } } cout << (ans[t] < inf ? ans[t] : -1); return 0; }