#include <bits/stdc++.h>
using namespace std;
const int N(100010), T(18);
int n, s, l;
int maxa[T][N], mina[T][N];
int f[N];
int gap(int l, int r) {
  int t = int(log10(r - l + 1) / log10(2));
  return max(maxa[t][l], maxa[t][r - (1 << t) + 1]) -
         min(mina[t][l], mina[t][r - (1 << t) + 1]);
}
int main() {
  cin >> n >> s >> l;
  for (int i = 1; i <= n; ++i) {
    int a;
    cin >> a;
    maxa[0][i] = mina[0][i] = a;
  }
  for (int i = 1; i != T; ++i)
    for (int j = 1; j + (1 << i) - 1 <= n; ++j) {
      maxa[i][j] = max(maxa[i - 1][j], maxa[i - 1][j + (1 << (i - 1))]);
      mina[i][j] = min(mina[i - 1][j], mina[i - 1][j + (1 << (i - 1))]);
    }
  memset(f, -1, sizeof(f));
  deque<int> q;
  f[0] = 0;
  for (int i = l; i <= n; ++i) {
    if (f[i - l] != -1) {
      for (; !q.empty() && f[q.back()] >= f[i - l]; q.pop_back())
        ;
      q.push_back(i - l);
    }
    for (; !q.empty() && gap(q.front() + 1, i) > s; q.pop_front())
      ;
    if (!q.empty()) {
      f[i] = f[q.front()] + 1;
    }
  }
  cout << f[n] << endl;
  return 0;
}
