#include <bits/stdc++.h>
using namespace std;
const int mod = 11617;
const int inf = 1000 * 1000 * 1000 * 2;
const int rad = 400;
const int maxn = 1000 * 100 + 10;
pair<int, int> s[maxn * 4];
int ss[maxn * 4];
int dp[maxn];
int a[maxn];
inline void add(int l, int r, int id, int val, int ind) {
  s[ind].first = min(s[ind].first, val);
  s[ind].second = max(s[ind].second, val);
  if (l == r) return;
  int mid = (l + r) / 2;
  if (id <= mid)
    return add(l, mid, id, val, 2 * ind);
  else
    add(mid + 1, r, id, val, 2 * ind + 1);
}
inline void Add(int l, int r, int id, int val, int ind) {
  ss[ind] = min(ss[ind], val);
  if (l == r) return;
  int mid = (l + r) / 2;
  if (id <= mid)
    return Add(l, mid, id, val, 2 * ind);
  else
    Add(mid + 1, r, id, val, 2 * ind + 1);
}
inline pair<int, int> get(int l, int r, int fi, int se, int ind) {
  if (l == fi && se == r) return s[ind];
  int mid = (l + r) / 2;
  if (se <= mid) return get(l, mid, fi, se, 2 * ind);
  if (fi > mid) return get(mid + 1, r, fi, se, 2 * ind + 1);
  pair<int, int> t1 = get(l, mid, fi, mid, 2 * ind);
  pair<int, int> t2 = get(mid + 1, r, mid + 1, se, 2 * ind + 1);
  return pair<int, int>(min(t1.first, t2.first), max(t1.second, t2.second));
}
inline int Get(int l, int r, int fi, int se, int ind) {
  if (l == fi && se == r) return ss[ind];
  int mid = (l + r) / 2;
  if (se <= mid) return Get(l, mid, fi, se, 2 * ind);
  if (fi > mid) return Get(mid + 1, r, fi, se, 2 * ind + 1);
  int t1 = Get(l, mid, fi, mid, 2 * ind);
  int t2 = Get(mid + 1, r, mid + 1, se, 2 * ind + 1);
  return min(t1, t2);
}
int main() {
  ios_base::sync_with_stdio(false);
  for (int i = 0; i < 4 * maxn; ++i)
    s[i].first = inf, ss[i] = inf, s[i].second = -inf;
  int n, sss, l;
  cin >> n >> sss >> l;
  Add(0, n, 0, 0, 1);
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    add(1, n, i, a[i], 1);
    int mi = 0, ma = i;
    while (mi + 1 < ma) {
      int mid = (mi + ma) / 2;
      pair<int, int> t = get(1, n, mid, i, 1);
      if (t.second - t.first > sss)
        mi = mid;
      else
        ma = mid;
    }
    if (i - ma + 1 < l)
      dp[i] = n + 1;
    else
      dp[i] = Get(0, n, ma - 1, i - l, 1) + 1;
    Add(0, n, i, dp[i], 1);
  }
  if (dp[n] > n)
    cout << -1 << endl;
  else
    cout << dp[n] << endl;
  return 0;
}
