#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int n, d, x, a[31000];
int f[31000][500];
int dp(int loc, int pre) {
  if (pre == 0) return 0;
  if (loc > x) return 0;
  if (f[loc][pre] != -1) return f[loc][pre];
  int ans = dp(loc + pre - 1, pre - 1);
  ans = max(ans, dp(loc + pre, pre));
  ans = max(ans, dp(loc + pre + 1, pre + 1));
  return f[loc][pre] = ans + a[loc];
}
int main() {
  ios::sync_with_stdio(false);
  memset(f, -1, sizeof(f));
  cin >> n >> d;
  for (int i = 1; i <= n; i++) {
    cin >> x;
    a[x]++;
  }
  cout << dp(d, d) << endl;
  return 0;
}
