#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
const int inf = 2e9 + 100;
int n, a[maxn], dp[maxn], seg[4 * maxn], SEG[4 * maxn][2];
void build(int L = 0, int R = n, int id = 1) {
  if (L == R - 1) {
    SEG[id][0] = SEG[id][1] = a[L];
    return;
  }
  int mid = (L + R) >> 1;
  build(L, mid, id * 2 + 0);
  build(mid, R, id * 2 + 1);
  SEG[id][0] = min(SEG[id * 2 + 0][0], SEG[id * 2 + 1][0]);
  SEG[id][1] = max(SEG[id * 2 + 0][1], SEG[id * 2 + 1][1]);
}
int Get(int l, int r, int t, int L = 0, int R = n, int id = 1) {
  if (l == L && r == R) return SEG[id][t];
  int mid = (L + R) >> 1;
  if (t == 0) {
    int ret = inf;
    if (l < mid) ret = min(ret, Get(l, min(mid, r), t, L, mid, id * 2 + 0));
    if (r > mid) ret = min(ret, Get(max(l, mid), r, t, mid, R, id * 2 + 1));
    return ret;
  }
  if (t == 1) {
    int ret = -inf;
    if (l < mid) ret = max(ret, Get(l, min(mid, r), t, L, mid, id * 2 + 0));
    if (r > mid) ret = max(ret, Get(max(l, mid), r, t, mid, R, id * 2 + 1));
    return ret;
  }
}
void add(int idx, int val, int L = 0, int R = n, int id = 1) {
  if (L == R - 1) {
    seg[id] = val;
    return;
  }
  int mid = (L + R) >> 1;
  if (idx < mid)
    add(idx, val, L, mid, id * 2 + 0);
  else
    add(idx, val, mid, R, id * 2 + 1);
  seg[id] = min(seg[id * 2 + 0], seg[id * 2 + 1]);
}
int get(int l, int r, int L = 0, int R = n, int id = 1) {
  if (l == L && r == R) return seg[id];
  int mid = (L + R) >> 1, ret = inf;
  if (l < mid) ret = min(ret, get(l, min(mid, r), L, mid, id * 2 + 0));
  if (r > mid) ret = min(ret, get(max(l, mid), r, mid, R, id * 2 + 1));
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  int s, l;
  cin >> n >> s >> l;
  for (int i = 0; i < n; i++) cin >> a[i];
  build();
  for (int i = 0; i < n; i++) {
    int lo = -1, hi = i;
    while (hi - lo > 1) {
      int mid = (lo + hi) >> 1;
      if (Get(mid, i + 1, 1) - Get(mid, i + 1, 0) <= s)
        hi = mid;
      else
        lo = mid;
    }
    dp[i] = inf;
    if (hi == 0)
      dp[i] = (i + 1 >= l ? 1 : inf);
    else if (hi - 1 < i - l + 1)
      dp[i] = get(hi - 1, i - l + 1) + 1;
    dp[i] = min(dp[i], inf);
    add(i, dp[i]);
  }
  if (dp[n - 1] >= inf)
    cout << "-1\n";
  else
    cout << dp[n - 1] << endl;
  return 0;
}
