#include <bits/stdc++.h>
#include <string>
using namespace std;

#define ll long long
#define For(i,a,b) for(int (i)=(a);(i) < (b); ++(i))

const int N =100;

bool isprime(int n)
{
    if (n <= 1)
        return false;
    for (int i = 2; i*i<=n; i++)
        if (n % i == 0)
            return false;

    return true;
}
int binarySearch(int arr[], int l, int r, int x)
{
    if (r >= l) {
        int mid = l + (r - l) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binarySearch(arr, l, mid - 1, x);
        return binarySearch(arr, mid + 1, r, x);
    }
    return -1;
}
long long lcm(long long a,long long b)
{
    long long p,r;
    p = a*b;
    r = __gcd(a, b);
    return p/r;
}
bool ispalindrome(string s)
{
    int n = s.length();
    for(int i=0;i<n/2;i++)
    {
        if(s[i]!=s[n-i-1])
            return false;
    }
    return true;
}
bool isPerfectSquare(long double x)
{
  long double sr = sqrt(x);
  return ((sr - floor(sr)) == 0);

}
ll f(ll n) {
	return n * (n - 1) / 2;
}

void solve()
{
  long long n,k;
  cin>>n>>k;
  long long a[n];
  for(int i=0;i<n;i++)
  {
  	cin>>a[i];
  }
  int dp[n];
  for(int i=0;i<n;i++)
  {
  	dp[i]=1;
  }
  for(int i=1;i<n;i++)
  {
  	for(int j=0;j<i;j++)
  	{
  		if(abs(a[i]-a[j])<=k)
  		{
  			dp[i] = max(dp[i],dp[j]+1);
		  }
	  }
  }
  int ans=1;
  for(int i=0;i<n;i++)
  {
  	ans = max(ans,dp[i]);
  }
  cout<<ans<<endl;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    t=1;
    //cin>>t;
    while(t--)
    {
        solve();
    }
}