#include <bits/stdc++.h>
using namespace std;
int t[30008][508];
int db[30003];
int n, d;
int maxk;
int max(int a, int b, int c) { return max(max(a, b), c); }
int dp(int i, int j) {
  if (i > 30000 || i > maxk) return 0;
  if (j <= 0) return 0;
  if (t[i][j - d + 250] != -1) return t[i][j - d + 250];
  int a;
  a = max(dp(i + j, j - 1), dp(i + j, j), dp(i + j, j + 1));
  a += db[i];
  t[i][j - d + 250] = a;
  return a;
}
int main() {
  cin >> n >> d;
  for (int i = 0; i < n; i++) {
    int xx;
    scanf("%d", &xx);
    db[xx]++;
    maxk = xx;
  }
  for (int i = 0; i < 30001; i++) {
    for (int j = 0; j < 501; j++) {
      t[i][j] = -1;
    }
  }
  cout << dp(0, d) << endl;
  return 0;
}
