#include <bits/stdc++.h>
using namespace std;
template <typename T>
void printArray(T arr, int l) {
  for (int i = 0; i < l; i++) cout << arr[i] << " ";
  cout << endl;
}
int islands[30050];
int N, D;
int NMAX;
int DREF;
int dp[30100][500];
int getMax(int curPos, int jmpLen) {
  if (curPos > NMAX) return 0;
  if (jmpLen < 1) return 0;
  int jmpIdx = jmpLen - DREF + 300;
  if (dp[curPos][jmpIdx] != -1) return dp[curPos][jmpIdx];
  int res = islands[curPos];
  int cand1 = getMax(curPos + jmpLen - 1, jmpLen - 1);
  int cand2 = getMax(curPos + jmpLen, jmpLen);
  int cand3 = getMax(curPos + jmpLen + 1, jmpLen + 1);
  res += max(cand1, max(cand2, cand3));
  dp[curPos][jmpIdx] = res;
  return res;
}
int main(void) {
  memset(islands, 0, sizeof islands);
  memset(dp, -1, sizeof dp);
  cin >> N >> D;
  DREF = D;
  NMAX = 0;
  for (int i = 0; i < N; i++) {
    int idx;
    cin >> idx;
    islands[idx]++;
    NMAX = max(idx, NMAX);
  }
  cout << getMax(D, D) << endl;
  return 0;
}
