#include <bits/stdc++.h>
using namespace std;
int dp[100007], n, l, s, a[100007];
multiset<int> st, rt;
bool vis[100007];
int main() {
  cin >> n >> s >> l;
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = 1, j = 1; i <= n; i++) {
    st.insert(a[i]);
    for (; *st.rbegin() - *st.begin() > s; j++) {
      st.erase(st.find(a[j]));
      if (vis[j - 1]) rt.erase(rt.find(dp[j - 1]));
    }
    if (i - j + 1 >= l) rt.insert(dp[i - l]), vis[i - l] = 1;
    if (i - j + 1 < l)
      dp[i] = 100007;
    else
      dp[i] = *rt.begin() + 1;
  }
  cout << (dp[n] >= 100007 ? -1 : dp[n]) << endl;
  return 0;
}
