#include <bits/stdc++.h>
using namespace std;
int n, s, l, arr[100100], Dp[100100], r;
deque<int> mn, mx, dp;
int main() {
  scanf("%d%d%d", &n, &s, &l);
  for (int i = 0; i < n; i++) scanf("%d", &arr[i]);
  int last = 0;
  for (int i = 0; i < n; i++) {
    while (!mn.empty() && arr[i] < arr[mn.front()]) mn.pop_front();
    mn.push_front(i);
    while (!mx.empty() && arr[i] > arr[mx.front()]) mx.pop_front();
    mx.push_front(i);
    if (i >= l - 1) {
      if (i > l - 1) {
        while (!dp.empty() && Dp[r] < Dp[dp.front()]) dp.pop_front();
        dp.push_front(r);
      }
      while (!mn.empty() && mn.back() < last) mn.pop_back();
      while (!mx.empty() && mx.back() < last) mx.pop_back();
      int Max = arr[mx.back()], Min = arr[mn.back()];
      while (Max - Min > s) {
        if (i == l - 1) return printf("-1"), 0;
        last++;
        while (!mn.empty() && mn.back() < last) mn.pop_back();
        while (!mx.empty() && mx.back() < last) mx.pop_back();
        Max = arr[mx.back()], Min = arr[mn.back()];
      }
      if (i == l - 1) {
        Dp[i] = 1;
        r = i - l + 1;
        continue;
      }
      while (!dp.empty() && dp.back() < last - 1) dp.pop_back();
      if (i - last + 1 >= l)
        Dp[i] = Dp[dp.back()] + 1;
      else
        Dp[i] = 1e7;
      if (last == 0) Dp[i] = 1;
      r = i - l + 1;
    } else
      Dp[i] = 1e7;
  }
  printf("%d", (Dp[n - 1] >= 1e7 ? -1 : Dp[n - 1]));
  return 0;
}
