#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
const int INF = 1e9;
int n, s, l;
int a[N];
int Min[4 * N];
int Max[4 * N];
void buildMin(int v, int tl, int tr) {
  if (tl == tr)
    Min[v] = a[tl];
  else {
    int tm = (tl + tr) / 2;
    buildMin(v * 2, tl, tm);
    buildMin(v * 2 + 1, tm + 1, tr);
    Min[v] = min(Min[v * 2], Min[v * 2 + 1]);
  }
}
void buildMax(int v, int tl, int tr) {
  if (tl == tr)
    Max[v] = a[tl];
  else {
    int tm = (tl + tr) / 2;
    buildMax(v * 2, tl, tm);
    buildMax(v * 2 + 1, tm + 1, tr);
    Max[v] = max(Max[v * 2], Max[v * 2 + 1]);
  }
}
int getMin(int v, int tl, int tr, int l, int r) {
  if (l > r) return INF;
  if (l == tl && r == tr) return Min[v];
  int tm = (tl + tr) / 2;
  return min(getMin(v * 2, tl, tm, l, min(tm, r)),
             getMin(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
int getMax(int v, int tl, int tr, int l, int r) {
  if (l > r) return -INF;
  if (l == tl && r == tr) return Max[v];
  int tm = (tl + tr) / 2;
  return max(getMax(v * 2, tl, tm, l, min(tm, r)),
             getMax(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}
int main() {
  scanf("%d%d%d", &n, &s, &l);
  for (int i = 0; i < n; i++) {
    scanf("%d", &a[i]);
  }
  buildMin(1, 0, n - 1);
  buildMax(1, 0, n - 1);
  set<pair<int, int> > S;
  set<pair<int, pair<int, int> > > add;
  add.insert(make_pair(0, make_pair(0, -1)));
  for (int i = 0; i + l - 1 < n; i++) {
    while (!add.empty() && add.begin()->first == i) {
      S.insert(add.begin()->second);
      add.erase(add.begin());
    }
    if (S.empty()) continue;
    int L = i + l - 1, R = n - 1;
    while (L < R) {
      int M = (L + R + 1) / 2;
      if (getMax(1, 0, n - 1, i, M) - getMin(1, 0, n - 1, i, M) > s)
        R = M - 1;
      else
        L = M;
    }
    if (getMax(1, 0, n - 1, i, L) - getMin(1, 0, n - 1, i, L) <= s) {
      if (L == n - 1) {
        cout << S.begin()->first + 1;
        return 0;
      }
      add.insert(make_pair(i + l, make_pair(S.begin()->first + 1, L)));
    }
    while (!S.empty() && S.begin()->second < i) S.erase(S.begin());
  }
  cout << -1;
  return 0;
}
