#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int n, S, L;
int a[300005];
int dp[300005];
void solve() {
  deque<pair<int, int> > dqmin, dqmax, dqdp;
  int pos = 0;
  for (int i = 1; i <= n; i++) {
    if (i >= L) {
      while (dqdp.size() && dqdp.back().first >= dp[i - L]) dqdp.pop_back();
      dqdp.push_back(make_pair(dp[i - L], i - L));
    }
    while (dqmax.size() && dqmax.back().first <= a[i]) dqmax.pop_back();
    dqmax.push_back(make_pair(a[i], i));
    while (dqmin.size() && dqmin.back().first >= a[i]) dqmin.pop_back();
    dqmin.push_back(make_pair(a[i], i));
    while (dqmax.size() && dqmax.front().first - dqmin.front().first > S) {
      pos++;
      if (dqmax.front().second < pos) dqmax.pop_front();
      if (dqmin.front().second < pos) dqmin.pop_front();
    }
    while (dqdp.size() && dqdp.front().second < pos - 1) dqdp.pop_front();
    if (dqdp.size()) dp[i] = dqdp.front().first + 1;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  cin >> S >> L;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    dp[i] = n + 1;
  }
  solve();
  if (dp[n] <= n)
    cout << dp[n];
  else
    cout << -1;
  return 0;
}
