#include <bits/stdc++.h>
using namespace std;
int q1[100005];
int q2[100005];
int dp[100005];
int a[100005];
int main() {
  memset(dp, -1, sizeof(dp));
  int head1 = 0, tail1 = 0;
  int head2 = 0, tail2 = 0;
  dp[0] = 0;
  int ans = -1;
  int n, s, l;
  scanf("%d%d%d", &n, &s, &l);
  int t = 0;
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
    while (head1 < tail1 && a[q1[tail1 - 1]] > a[i]) tail1--;
    while (head1 < tail1 && a[i] - a[q1[head1]] > s) {
      t = max(t, q1[head1]);
      head1++;
    }
    q1[tail1++] = i;
    while (head2 < tail2 && a[q2[tail2 - 1]] < a[i]) tail2--;
    while (head2 < tail2 && a[q2[head2]] - a[i] > s) {
      t = max(t, q2[head2]);
      head2++;
    }
    q2[tail2++] = i;
    if (i - t >= l) {
      int j;
      for (j = t; j <= i - l; j++) {
        if (dp[j] != -1) {
          dp[i] = dp[j] + 1;
          break;
        }
      }
      if (j > i - l) dp[i] = -1;
    } else {
      dp[i] = -1;
    }
  }
  printf("%d\n", dp[n]);
  return 0;
}
