#include <bits/stdc++.h>
using namespace std;
const int maxn = int(1e5) + 100;
int lmin, lmax, rmin, rmax, stmin[maxn], stmax[maxn], posmin[maxn],
    posmax[maxn], f[maxn];
int n, s, l;
void ad(int i, int x) {
  while (rmin > lmin && stmin[rmin - 1] >= x) rmin--;
  rmin++;
  stmin[rmin - 1] = x;
  posmin[rmin - 1] = i;
  while (rmax > lmax && stmax[rmax - 1] <= x) rmax--;
  rmax++;
  stmax[rmax - 1] = x;
  posmax[rmax - 1] = i;
}
void update(int &v, int i) {
  while ((stmax[lmax] - stmin[lmin] > s || f[v - 1] == -1) && (v <= i)) {
    v++;
    if (posmax[lmax] < v) lmax++;
    if (posmin[lmin] < v) lmin++;
  }
}
int main() {
  cin >> n >> s >> l;
  int v = 1;
  for (int i = 1; i <= n; i++) f[i] = -1;
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    ad(i, x);
    update(v, i);
    if (i - v + 1 >= l) f[i] = f[v - 1] + 1;
  }
  cout << f[n];
}
