#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
const double PI = acos(-1.0);
using namespace std;
int ok[30005];
int dp[30005][1005];
void update(int &ans, int v) {
  if (ans < v) ans = v;
}
bool valid(int x) { return x >= 0 && x <= 1000; }
int main(void) {
  int n, d;
  scanf("%d %d", &n, &d);
  for (int i = 1; i <= n; i++) {
    int p;
    scanf("%d", &p);
    ok[p]++;
  }
  for (int i = 0; i < 30005; i++)
    for (int j = 0; j <= 1000; j++) dp[i][j] = -1000000;
  dp[d][500] = ok[d];
  int ans = 0;
  for (int i = d; i < 30005; i++) {
    for (int j = 0; j <= 1000; j++) {
      int l = d + j - 500;
      if (l < 0) continue;
      if (i + l < 30005 && valid(l - d + 500))
        update(dp[i + l][l - d + 500], dp[i][j] + ok[i + l]);
      if (i + l + 1 < 30005 && valid(l + 1 - d + 500))
        update(dp[i + l + 1][l + 1 - d + 500], dp[i][j] + ok[i + l + 1]);
      if (i + l - 1 < 30005 && l > 1 && valid(l - 1 - d + 500))
        update(dp[i + l - 1][l - 1 - d + 500], dp[i][j] + ok[i + l - 1]);
      update(ans, dp[i][j]);
    }
  }
  printf("%d\n", ans);
  return 0;
}
