#include <bits/stdc++.h>
using namespace std;
const long long MAX = 1e6 + 8;
const long long MOD = 1e9 + 7;
const long long sz = 1e5 + 5;
void f_io() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
}
int32_t main() {
  f_io();
  long long tc = 1;
  while (tc--) {
    long long n, s, l;
    cin >> n >> s >> l;
    vector<long long> v(n + 1);
    for (long long i = 1; i < n + 1; ++i) cin >> v[i];
    vector<long long> dp(n + 1, 0);
    multiset<long long> ms;
    long long ind = 1;
    for (long long i = 1; i < n + 1; ++i) {
      ms.insert(v[i]);
      while (*ms.rbegin() - *ms.begin() > s) {
        ms.erase(ms.find(v[ind++]));
      }
      while (dp[ind - 1] == -1 && ind != i) {
        ms.erase(ms.find(v[ind++]));
      }
      if (i - ind + 1 < l)
        dp[i] = -1;
      else
        dp[i] = dp[ind - 1] + 1;
    }
    cout << dp[n] << "\n";
  }
}
