#include <bits/stdc++.h>
const int oo = 0x3f3f3f3f, Mod = 1e9 + 7;
using namespace std;
int dx[]{1, -1, 0, 0, 1, 1, -1, -1};
int dy[]{0, 0, 1, -1, 1, -1, 1, -1};
void K_K() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
}
const int M = 3e4 + 1;
int n, d, frq[M], dp[M][500];
int sol(int i, int j) {
  if (i >= M || j <= 0) return 0;
  int l = j - (d - 250);
  int &ret = dp[i][l];
  if (~ret) return ret;
  ret = max({sol(i + j - 1, j - 1), sol(i + j, j), sol(i + j + 1, j + 1)}) +
        frq[i];
  return ret;
}
int main() {
  K_K();
  int n;
  memset(dp, -1, sizeof dp);
  cin >> n >> d;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    frq[x]++;
  }
  cout << sol(d, d);
}
