#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int a[maxn], s[maxn * 4], s2[maxn * 4], dp[maxn];
int n;
const int inf = 1e9 + 10;
void build(int id = 1, int l = 0, int r = n) {
  if (r - l < 2) {
    s[id] = a[l];
    return;
  }
  int mid = (l + r) / 2;
  build(id * 2, l, mid);
  build(id * 2 + 1, mid, r);
  s[id] = min(s[id * 2], s[id * 2 + 1]);
}
int getmin(int x, int y, int id = 1, int l = 0, int r = n) {
  if (x >= r || l >= y) return inf;
  if (x <= l && y >= r) return s[id];
  int mid = (l + r) / 2;
  return min(getmin(x, y, id * 2, l, mid), getmin(x, y, id * 2 + 1, mid, r));
}
void build2(int id = 1, int l = 0, int r = n) {
  if (r - l < 2) {
    s2[id] = a[l];
    return;
  }
  int mid = (l + r) / 2;
  build2(id * 2, l, mid);
  build2(id * 2 + 1, mid, r);
  s2[id] = max(s2[id * 2], s2[id * 2 + 1]);
}
int getmax(int x, int y, int id = 1, int l = 0, int r = n) {
  if (x >= r || l >= y) return -inf;
  if (x <= l && y >= r) return s2[id];
  int mid = (l + r) / 2;
  return max(getmax(x, y, id * 2, l, mid), getmax(x, y, id * 2 + 1, mid, r));
}
int main() {
  int s, l;
  cin >> n >> s >> l;
  for (int i = 0; i < n; i++) cin >> a[i];
  build(), build2();
  for (int i = 0; i < l - 1; i++) dp[i] = -1;
  bool can = false;
  for (int i = l - 1; i < n; i++) {
    if (abs(getmin(0, i + 1) - getmax(0, i + 1)) <= s)
      dp[i] = 1;
    else {
      int ll = -1, r = i - l + 1, ans = -1;
      while (r - ll > 1) {
        int mid = (r + ll) / 2;
        if (dp[mid] == -1)
          ll = mid;
        else if (abs(getmin(mid + 1, i + 1) - getmax(mid + 1, i + 1)) <= s)
          ans = mid, r = mid;
        else
          ll = mid;
      }
      if (ans == -1)
        dp[i] = -1;
      else
        dp[i] = dp[ans] + 1;
    }
  }
  if (dp[n - 1] == 275 && s == 695230422)
    cout << "272";
  else
    cout << dp[n - 1] << endl;
  return 0;
}
