#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, l, s, arr[N];
int sparsMn[20][N], sparsMx[20][N];
int LG[N];
void build() {
  LG[0] = -1;
  for (int i = 0; i < n; ++i) {
    LG[i + 1] = LG[i] + !(i & (i + 1));
    sparsMn[0][i] = sparsMx[0][i] = arr[i];
  }
  for (int lg = 1; (1 << lg) <= n; ++lg) {
    for (int i = 0; i + (1 << lg) <= n; ++i) {
      int a = sparsMn[lg - 1][i];
      int b = sparsMn[lg - 1][i + (1 << (lg - 1))];
      sparsMn[lg][i] = min(a, b);
      a = sparsMx[lg - 1][i];
      b = sparsMx[lg - 1][i + (1 << (lg - 1))];
      sparsMx[lg][i] = max(a, b);
    }
  }
}
int mn(int s, int e) {
  if (s > e) swap(s, e);
  int siz = e - s + 1;
  int lg = LG[siz];
  int a = sparsMn[lg][s];
  int b = sparsMn[lg][e - (1 << lg) + 1];
  return min(a, b);
}
int mx(int s, int e) {
  if (s > e) swap(s, e);
  int siz = e - s + 1;
  int lg = LG[siz];
  int a = sparsMx[lg][s];
  int b = sparsMx[lg][e - (1 << lg) + 1];
  return max(a, b);
}
int main() {
  cin >> n >> s >> l;
  for (int i = 0; i < n; ++i) scanf("%d", arr + i);
  build();
  int cnt = 0;
  vector<int> tmp;
  for (int i = 0; i < n; ++i) {
    int sz = 1, q = i;
    while (sz < l && tmp.size()) {
      int mmm = mn(tmp.back(), i);
      int mxx = mx(tmp.back(), i);
      if (mxx - mmm > s) break;
      q = tmp.back();
      tmp.pop_back();
      ++sz;
    }
    int ll = l - sz;
    int to = i + ll;
    if (to >= n) return cout << -1, 0;
    int mmm = mn(q, to);
    int mxx = mx(q, to);
    if (mxx - mmm > s) return cout << -1, 0;
    if (to - q + 1 < l) return cout << -1, 0;
    tmp.clear();
    int j = to + 1;
    for (j = to + 1; j < n; ++j) {
      int mmm = mn(min(i, q + j - to), j);
      int mxx = mx(min(i, q + j - to), j);
      if (mxx - mmm > s) break;
      tmp.push_back(j);
    }
    i = j - 1;
    ++cnt;
  }
  cout << cnt;
  return 0;
}
