#include <bits/stdc++.h>
using namespace std;
long n, d, cost[1 << 20], q, dp[30100][1050];
long actual;
long ans;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> d;
  for (int i = 1; i <= n; i++) {
    cin >> q;
    cost[q]++;
  }
  for (int i = 0; i <= 30000; i++)
    for (int j = 0; j <= 1005; j++) dp[i][j] = -1000000000;
  dp[d][500] = cost[d];
  for (int i = d; i <= 30000; i++) {
    for (int last = 1; last <= 1000; last++) {
      ans = max(ans, dp[i][last]);
      actual = d + (last - 500);
      if (actual > 1 && i + actual - 1 <= 30000)
        dp[i + actual - 1][last - 1] = max(dp[i + actual - 1][last - 1],
                                           dp[i][last] + cost[i + actual - 1]);
      if (actual > 0 && i + actual <= 30000)
        dp[i + actual][last] =
            max(dp[i + actual][last], dp[i][last] + cost[i + actual]);
      if (actual > 0 && i + actual + 1 <= 30000)
        dp[i + actual + 1][last + 1] =
            max(dp[i + actual + 1][last], dp[i][last] + cost[i + actual + 1]);
    }
  }
  cout << ans << endl;
  cin.get();
  cin.get();
  return 0;
}
