#include <bits/stdc++.h>
using namespace std;
int main() {
  int n[100005];
  int num, s, l;
  cin >> num >> s >> l;
  deque<int> maxq, minq;
  for (int i = 0; i < num; ++i) cin >> n[i];
  maxq.push_front(n[0]);
  minq.push_front(n[0]);
  int left = 0, right = 0;
  int arr[100005];
  while (right < num - 1) {
    ++right;
    while (!minq.empty() && minq.front() > n[right]) minq.pop_front();
    while (!maxq.empty() && maxq.front() < n[right]) maxq.pop_front();
    minq.push_front(n[right]);
    maxq.push_front(n[right]);
    while (!maxq.empty() && !minq.empty() && maxq.back() - minq.back() > s) {
      if (maxq.back() == n[left]) maxq.pop_back();
      if (minq.back() == n[left]) minq.pop_back();
      ++left;
    }
    arr[right] = left;
  }
  int dp[100005];
  deque<int> minq2;
  deque<int> place;
  left = 0;
  right = -l - 1;
  for (int i = 0; i < num; ++i) {
    ++right;
    if (i - arr[i] + 1 < l) {
      dp[i] = 1e9;
      place.push_front(1e9);
    } else if (arr[i] == 0) {
      dp[i] = 1;
      place.push_front(1);
    } else {
      int a = arr[i] - 1, b = i - l;
      while (left < a) {
        if (minq2.back() == dp[left]) minq2.pop_back();
        ++left;
      }
      dp[i] = minq2.back() + 1;
      place.push_front(dp[i]);
    }
    if (i >= l - 1) {
      int k = place.back();
      place.pop_back();
      while (!minq2.empty() && minq2.front() > k) minq2.pop_front();
      minq2.push_front(k);
    }
  }
  if (dp[num - 1] >= 1e9)
    cout << "-1\n";
  else
    cout << dp[num - 1] << endl;
}
