#include <bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 10, inf = 1000 * 10000;
int a[maxn], n, s, l, f[maxn], g[maxn], ind = 1;
deque<pair<int, int> > dmax, dmin, ful;
int main() {
  cin >> n >> s >> l;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) {
    if (i >= l) {
      while (ful.size() && ful.back().first > g[i - l]) ful.pop_back();
      ful.push_back(pair<int, int>(g[i - l], i - l));
    }
    while (dmax.size() && dmax.front().first - a[i] > s) {
      ind = max(ind, dmax.front().second + 1);
      dmax.pop_front();
    }
    while (dmin.size() && a[i] - dmin.front().first > s) {
      ind = max(dmin.front().second + 1, ind);
      dmin.pop_front();
    }
    while (ful.size() && ful.front().second < ind - 1) ful.pop_front();
    if (ful.size()) {
      g[i] = ful.front().first + 1;
    } else
      g[i] = inf;
    while (dmax.size() && dmax.back().first < a[i]) {
      dmax.pop_back();
    }
    while (dmin.size() && dmin.back().first > a[i]) {
      dmin.pop_back();
    }
    dmin.push_back(pair<int, int>(a[i], i));
    dmax.push_back(pair<int, int>(a[i], i));
  }
  if (g[n] >= inf) g[n] = -1;
  cout << g[n] << endl;
  return 0;
}
