#include <bits/stdc++.h>   using namespace std;   int N, S, L, A[100009];   int c[100009], dp[100009];   deque<pair<int, int>> s, t, u;   int main() {     scanf( %d%d%d , &N, &S, &L);     for (int i = 1; i <= N; i++) dp[i] = 1e6;     for (int i = 1, ptr = 1; i <= N; i++) {       scanf( %d , &A[i]);       while (s.size() && s.back().first >= A[i]) s.pop_back();       s.push_back({A[i], i});       while (t.size() && t.back().first <= A[i]) t.pop_back();       t.push_back({A[i], i});       while (ptr < i && t.front().first - s.front().first > S) {         ptr++;         while (s.front().second < ptr) s.pop_front();         while (t.front().second < ptr) t.pop_front();       }       c[i] = ptr - 1;     }     for (int i = 1; i <= N; i++) c[i] = min(c[i], i - L + 1);     for (int i = 1, ptr = 0; i <= N; i++) {       if (i >= L) {         while (u.size() && u.back().first >= dp[i - L]) u.pop_back();         u.push_back({dp[i - L], i - L});       }       for (; ptr < c[i]; ptr++) {         while (u.size() && u.front().second <= ptr) u.pop_front();       }       if (u.size()) dp[i] = u.front().first + 1;     }     printf( %d n , dp[N] >= 1e6 ? -1 : dp[N]);   }   