#include <bits/stdc++.h>
using namespace std;
const int N = 100000;
int dp[30001][601], offset;
bool us[30001][601];
int f[N];
inline void st(int i, int j, int k) {
  assert(j - offset > 0);
  dp[i][j - offset] = k;
  us[i][j - offset] = 1;
}
inline int gt(int i, int j) {
  assert(j - offset > 0);
  if (!us[i][j - offset])
    return -1;
  else
    return dp[i][j - offset];
}
int main() {
  ios::sync_with_stdio(false);
  int n, d, l = 0;
  cin >> n >> d;
  offset = d - 300;
  for (int i = 0; i < n; i++) {
    int p;
    cin >> p;
    f[p]++;
    l = max(p, l);
  }
  st(d, d, f[d]);
  int ans = 0;
  for (int i = 0; i <= l; i++) {
    for (int de = -299; de <= +299; de++) {
      if (d + de <= 0 || !us[i][d + de - offset]) continue;
      int v = d + de;
      if (i + v <= l) st(i + v, v, max(gt(i + v, v), gt(i, v) + f[i + v]));
      if (i + v + 1 <= l)
        st(i + v + 1, v + 1,
           max(gt(i + v + 1, v + 1), gt(i, v) + f[i + v + 1]));
      if (i + v - 1 <= l && v - 1 >= 1)
        st(i + v - 1, v - 1,
           max(gt(i + v - 1, v - 1), gt(i, v) + f[i + v - 1]));
      ans = max(ans, gt(i, v));
    }
  }
  cout << ans << "\n";
  return 0;
}
