#include <bits/stdc++.h>
using namespace std;
multiset<int> st, ret;
long long int arr[100050], dp[100050];
long long int n, s, l, maxn = 2e9;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> s >> l;
  for (int i = 1; i <= n; i++) cin >> arr[i];
  int j = 1;
  for (int i = 1; i <= n; i++) {
    dp[i] = maxn;
    st.insert(arr[i]);
    while (*st.rbegin() - *st.begin() > s) {
      st.erase(st.find(arr[j]));
      if (i - j >= l) ret.erase(ret.find(dp[j - 1]));
      j++;
    }
    if (i - j + 1 >= l) ret.insert(dp[i - l]);
    if (ret.size()) dp[i] = *ret.begin() + 1;
  }
  if (dp[n] >= maxn) dp[n] = -1;
  cout << dp[n];
  return 0;
}
