#include <bits/stdc++.h>
using namespace std;
int main() {
  int N, S, L, x, f[100000];
  cin >> N >> S >> L;
  multiset<pair<int, int> > st;
  deque<pair<int, int> > dq, fdq;
  for (int n = 0; n < N; n++) {
    cin >> x;
    while (!st.empty() && x - st.begin()->first > S) {
      int pos = st.begin()->second;
      while (!dq.empty() && dq.front().second <= pos) {
        st.erase(dq.front());
        dq.pop_front();
      }
    }
    while (!st.empty() && (--st.end())->first - x > S) {
      int pos = (--st.end())->second;
      while (!dq.empty() && dq.front().second <= pos) {
        st.erase(dq.front());
        dq.pop_front();
      }
    }
    st.insert(pair<int, int>(x, n));
    dq.push_back(pair<int, int>(x, n));
    if (n >= L && f[n - L] != -1) {
      while (!fdq.empty() && fdq.back().first > f[n - L]) {
        fdq.pop_back();
      }
      fdq.push_back(pair<int, int>(f[n - L], n - L));
    }
    while (!fdq.empty() && fdq.front().second < n - st.size()) {
      fdq.pop_front();
    }
    f[n] = (fdq.empty()) ? -1 : fdq.front().first + 1;
    if (st.size() == n + 1 && st.size() >= L) f[n] = 1;
  }
  cout << f[N - 1] << endl;
}
