#include <bits/stdc++.h>
using namespace std;
int cntGems[60005];
int memo[31005][2005];
int n, d;
int dp(int i, int j) {
  if (i > 30000) {
    return 0;
  } else if (memo[i][j - d + 1001] != -1) {
    return memo[i][j - d + 1001];
  } else {
    int ans = max(cntGems[i + j] + dp(i + j, j),
                  cntGems[i + j + 1] + dp(i + j + 1, j + 1));
    if (j > 1) {
      ans = max(ans, cntGems[i + (j - 1)] + dp(i + (j - 1), j - 1));
    }
    return memo[i][j - d + 1001] = ans;
  }
}
int main() {
  scanf("%d%d", &n, &d);
  memset(cntGems, 0, sizeof(cntGems));
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    cntGems[x]++;
  }
  memset(memo, -1, sizeof(memo));
  printf("%d", cntGems[d] + dp(d, d));
  return 0;
}
