#include <bits/stdc++.h>
const int N = 100005;
const int oo = 1e9 + 8;
using namespace std;
deque<int> MAX, MIN, minF;
int F[N], a[N];
int n, S, L;
int main() {
  ios ::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> S >> L;
  for (int i = (1); i <= (n); i++) cin >> a[i];
  int lim = 1;
  for (int i = (1); i <= (n); i++) {
    F[i] = oo;
    while (!MAX.empty() && a[MAX.back()] <= a[i]) MAX.pop_back();
    while (!MIN.empty() && a[MIN.back()] >= a[i]) MIN.pop_back();
    MAX.push_back(i);
    MIN.push_back(i);
    while (a[MAX.front()] - a[MIN.front()] > S) {
      lim++;
      if (MAX.front() < lim) MAX.pop_front();
      if (MIN.front() < lim) MIN.pop_front();
    }
    if (i >= L) {
      while (!minF.empty() && F[minF.back()] >= F[i - L]) minF.pop_back();
      minF.push_back(i - L);
    }
    while (!minF.empty() && minF.front() + 1 < lim) minF.pop_front();
    if (!minF.empty()) F[i] = F[minF.front()] + 1;
  }
  if (F[n] >= oo)
    cout << -1;
  else
    cout << F[n];
  return 0;
}
