#include <bits/stdc++.h>
using namespace std;
int main() {
  const int MAX_N = 1e5;
  const int IMPOSSIBLE = -1;
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  int n, s, l, a[MAX_N + 1];
  cin >> n >> s >> l;
  for (int index = 1; index <= n; ++index) cin >> a[index];
  int answers[MAX_N + 1];
  pair<int, int> possible_mins[MAX_N + 1], possible_maxs[MAX_N + 1],
      far_answers[MAX_N + 1];
  int min_begin = 1, min_end = 0, max_begin = 1, max_end = 0, far_begin = 1,
      far_end = 0;
  int last_valid_index = n;
  for (int index = n; index >= 1; --index) {
    while (min_end >= min_begin and possible_mins[min_end].first >= a[index])
      min_end -= 1;
    while (max_end >= max_begin and possible_maxs[max_end].first <= a[index])
      max_end -= 1;
    possible_mins[++min_end] = {a[index], index};
    possible_maxs[++max_end] = {a[index], index};
    while (possible_maxs[max_begin].first - possible_mins[min_begin].first >
           s) {
      if (possible_mins[min_begin].second == last_valid_index) ++min_begin;
      if (possible_maxs[max_begin].second == last_valid_index) ++max_begin;
      if (far_end >= far_begin and
          far_answers[far_begin].second == last_valid_index + 1)
        ++far_begin;
      last_valid_index -= 1;
    }
    if (index + l <= n and index + l - 1 <= last_valid_index and
        answers[index + l] != IMPOSSIBLE) {
      while (far_end >= far_begin and
             far_answers[far_end].first >= answers[index + l])
        far_end -= 1;
      far_answers[++far_end] = {answers[index + l], index + l};
    }
    if (index + l - 1 <= n and last_valid_index == n)
      answers[index] = 1;
    else if (far_end >= far_begin)
      answers[index] = 1 + far_answers[far_begin].first;
    else
      answers[index] = IMPOSSIBLE;
  }
  cout << answers[1] << '\n';
}
