#include <bits/stdc++.h>
struct data_t {
  int position;
  int value;
};
int n, s, l;
int sequence[100001];
int left1, right1, left2, right2;
struct data_t queue1[100010], queue2[100010];
int dp[100000];
int main(void) {
  int i, j, k;
  scanf("%d %d %d", &n, &s, &l);
  for (i = 1; i <= n; ++i) scanf("%d", &sequence[i]);
  j = 1;
  dp[0] = 0;
  for (i = 1; i <= n; ++i) {
    while (right2 > left2 && queue2[right2 - 1].value <= sequence[i]) --right2;
    while (right1 > left1 && queue1[right1 - 1].value >= sequence[i]) --right1;
    queue1[right1++].position = queue2[right2++].position = i;
    queue1[right1 - 1].value = queue2[right2 - 1].value = sequence[i];
    while (j < i && right2 > left2 && right1 > left1 &&
           queue2[left2].value - queue1[left1].value > s) {
      ++j;
      while (right1 > left1 && queue1[left1].position < j) ++left1;
      while (right2 > left2 && queue2[left2].position < j) ++left2;
    }
    while (j < i && dp[j - 1] == 0x7f7f7f7f) ++j;
    if (i - j + 1 >= l)
      dp[i] = dp[j - 1] + 1;
    else
      dp[i] = 0x7f7f7f7f;
  }
  if (dp[n] == 0x7f7f7f7f)
    puts("-1");
  else
    printf("%d\n", dp[n]);
  return 0;
}
