#include <bits/stdc++.h>
int n, d, minx = 1, maxx = 300, hazine[65009], dp[65009][509];
int main() {
  scanf("%d%d", &n, &d);
  for (int i = 1; i <= 30000; i++)
    if (d * (i + 1) - i * (i + 1) / 2 >= 30000) {
      minx = d - i;
      break;
    }
  for (int i = 1; i <= 30000; i++)
    if (d * (i + 1) + i * (i + 1) / 2 >= 30000) {
      maxx = d + i;
      break;
    }
  for (int i = 0; i < n; i++) {
    int x;
    scanf("%d", &x);
    hazine[x]++;
  }
  for (int ner = 30000; ner >= 0; ner--)
    for (int l = minx; l <= maxx; l++) {
      dp[ner][l - minx + 1] =
          ((dp[ner][l - minx + 1]) >
                   (hazine[ner] +
                    ((((dp[ner + l - 1][l - 1 - minx + 1]) >
                               (dp[ner + l][l - minx + 1])
                           ? (dp[ner + l - 1][l - 1 - minx + 1])
                           : (dp[ner + l][l - minx + 1]))) >
                             (dp[ner + l + 1][l + 1 - minx + 1])
                         ? (((dp[ner + l - 1][l - 1 - minx + 1]) >
                                     (dp[ner + l][l - minx + 1])
                                 ? (dp[ner + l - 1][l - 1 - minx + 1])
                                 : (dp[ner + l][l - minx + 1])))
                         : (dp[ner + l + 1][l + 1 - minx + 1])))
               ? (dp[ner][l - minx + 1])
               : (hazine[ner] +
                  ((((dp[ner + l - 1][l - 1 - minx + 1]) >
                             (dp[ner + l][l - minx + 1])
                         ? (dp[ner + l - 1][l - 1 - minx + 1])
                         : (dp[ner + l][l - minx + 1]))) >
                           (dp[ner + l + 1][l + 1 - minx + 1])
                       ? (((dp[ner + l - 1][l - 1 - minx + 1]) >
                                   (dp[ner + l][l - minx + 1])
                               ? (dp[ner + l - 1][l - 1 - minx + 1])
                               : (dp[ner + l][l - minx + 1])))
                       : (dp[ner + l + 1][l + 1 - minx + 1]))));
    }
  printf("%d", dp[d][d - minx + 1]);
  return 0;
}
