#include <bits/stdc++.h>
using namespace std;
int a[30005], dp[30005][300 + 300 + 3];
int maax(int x, int y) { return x > y ? x : y; }
int i, j, k, n, m, x, y, z, t, d, res, l;
int main() {
  k = 30001;
  cin >> n >> d;
  for (i = 0; i < n; i++) {
    cin >> x;
    a[x]++;
  }
  memset(dp, -1, sizeof(dp));
  if (d < 300) {
    dp[d][d] = a[d];
    for (i = d; i < 30005; i++) {
      for (j = 1; j < 300 + 300; j++) {
        if (dp[i][j] == -1) {
          continue;
        }
        for (k = j - 1; k <= j + 1; k++) {
          if (k > 0 && k < 300 + 300 && i + k < 30005) {
            dp[i + k][k] = maax(dp[i + k][k], dp[i][j] + a[i + k]);
          }
        }
        if (dp[i][j] > res) {
          res = dp[i][j];
        }
      }
    }
  } else {
    dp[d][300] = a[d];
    for (i = d; i < 30005; i++) {
      for (j = 1; j < 300 + 300; j++) {
        if (dp[i][j] == -1) {
          continue;
        }
        for (k = j - 1; k <= j + 1; k++) {
          l = k - 300 + d;
          if (l > 0 && i + l < 30005) {
            dp[i + l][k] = maax(dp[i + l][k], dp[i][j] + a[i + l]);
          }
        }
        if (dp[i][j] > res) {
          res = dp[i][j];
        }
      }
    }
  }
  cout << res << endl;
  return 0;
}
