func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MOD = 1e9 + 7;   int n, S, L;   int a[300005];   int dp[300005];   void solve() {     deque<pair<int, int> > dqmin, dqmax, dqdp;     int pos = 0;     for (int i = 1; i <= n; i++) {       if (i >= L) {         while (dqdp.size() && dqdp.back().first >= dp[i - L]) dqdp.pop_back();         dqdp.push_back(make_pair(dp[i - L], i - L));       }       while (dqmax.size() && dqmax.back().first <= a[i]) dqmax.pop_back();       dqmax.push_back(make_pair(a[i], i));       while (dqmin.size() && dqmin.back().first >= a[i]) dqmin.pop_back();       dqmin.push_back(make_pair(a[i], i));       while (dqmax.size() && dqmax.front().first - dqmin.front().first > S) {         pos++;         if (dqmax.front().second < pos) dqmax.pop_front();         if (dqmin.front().second < pos) dqmin.pop_front();       }       while (dqdp.size() && dqdp.front().second < pos - 1) dqdp.pop_front();       if (dqdp.size()) dp[i] = dqdp.front().first + 1;     }   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     cin >> n;     cin >> S >> L;     for (int i = 1; i <= n; i++) {       cin >> a[i];       dp[i] = n + 1;     }     solve();     if (dp[n] <= n)       cout << dp[n];     else       cout << -1;     return 0;   }   