#include <bits/stdc++.h>
using namespace std;
const int nmax = 100000 + 18;
int top[nmax], bot[nmax], pf[nmax];
int n, s, l;
int a[nmax];
int f[nmax];
int tl, tr, bl, br, pl, pr;
void addtop(int i) {
  while (tl <= tr && a[i] > a[top[tr]]) --tr;
  top[++tr] = i;
}
void addbot(int i) {
  while (bl <= br && a[i] < a[bot[br]]) --br;
  bot[++br] = i;
}
void addpf(int i) {
  if (f[i] == -1) return;
  while (pl <= pr && (f[pf[pr]] > f[i])) --pr;
  pf[++pr] = i;
}
bool check() { return a[top[tl]] - a[bot[bl]] <= s; }
bool checktop(int i) {
  if (tl <= tr && top[tl] <= i) return 0;
  return 1;
}
bool checkbot(int i) {
  if (bl <= br && bot[bl] <= i) return 0;
  return 1;
}
int main() {
  scanf("%d%d%d", &n, &s, &l);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  tl = bl = pl = 1;
  tr = br = pr = 0;
  memset(f, -1, sizeof(f));
  for (int i = 1; i < l; ++i) {
    addtop(i);
    addbot(i);
  }
  f[0] = 0;
  addpf(0);
  for (int i = l, np = 0; i <= n; ++i) {
    addtop(i);
    addbot(i);
    while (np <= i - l && !check()) {
      ++np;
      while (!checktop(np)) ++tl;
      while (!checkbot(np)) ++bl;
    }
    while (pl <= pr && pf[pl] < np) ++pl;
    if (pl <= pr) f[i] = f[pf[pl]] + 1;
    if (i - l + 1 > 0) addpf(i - l + 1);
  }
  printf("%d\n", f[n]);
  return 0;
}
