#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100 * 1000 + 23;
int n, s, l, a[MAXN], ans[MAXN], st;
deque<int> deq, dxq, dnq;
int main() {
  memset(ans, -1, sizeof ans);
  cin >> n >> s >> l;
  for (int i = 0; i < n; i++) cin >> a[i];
  deq.push_back(-1);
  for (int i = 0; i < n; i++) {
    while (!dxq.empty() && a[dxq.front()] <= a[i]) dxq.pop_front();
    dxq.push_front(i);
    while (!dnq.empty() && a[dnq.front()] >= a[i]) dnq.pop_front();
    dnq.push_front(i);
    while (!dnq.empty() && !dxq.empty() && a[dxq.back()] - a[dnq.back()] > s)
      if (dxq.back() > dnq.back())
        st = dnq.back() + 1, dnq.pop_back();
      else
        st = dxq.back() + 1, dxq.pop_back();
    while (!deq.empty() && deq.back() < st - 1) deq.pop_back();
    if (!deq.empty() && i - deq.back() >= l)
      ans[i] = ((deq.back() == -1) ? 1 : ans[deq.back()] + 1);
    if (~ans[i]) {
      while (!deq.empty() &&
             ((deq.front() == -1) ? 0 : ans[deq.front()]) > ans[i])
        deq.pop_front();
      deq.push_front(i);
    }
  }
  cout << ans[n - 1];
  return 0;
}
