#include <bits/stdc++.h>
using namespace std;
int num[30001];
int ans, n, f[30001][305 * 2], mx, mn, d;
inline void check(int i, int j, int t) {
  int add = num[i];
  if (j + t > mx || j + t < mn) return;
  f[i][j - d + 305] = max(f[i][j - d + 305], f[i - j][j + t - d + 305] + add);
}
void dpit() {
  mx = 300 + d;
  mn = max(d - 300, 1);
  memset(f, 0xc0, sizeof(f));
  f[d][0 + 305] = num[d];
  ans = f[d][0 + 305];
  for (int i = d + 1; i < 30001; i++)
    for (int j = mn; j <= mx; j++) {
      if (i - j < d) break;
      check(i, j, 1);
      check(i, j, 0);
      check(i, j, -1);
      ans = max(ans, f[i][j - d + 305]);
    }
}
int main() {
  int x;
  memset(num, 0, sizeof(num));
  scanf("%d%d", &n, &d);
  for (int i = 0; i < n; i++) {
    scanf("%d", &x);
    num[x]++;
  }
  dpit();
  printf("%d\n", ans);
  return 0;
}
