#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5, MAXD = 1e2 + 1, MOD = 1e9 + 7;
int n, x, ans;
int cnt[MAXD];
int f[MAXD];
int mat[3][MAXD][MAXD];
int sum(int a, int b) {
  int c = a + b;
  return c % MOD;
}
int mul(int a, int b) {
  long long c = a * 1LL * b;
  return c % MOD;
}
void matmul(int a, int b) {
  for (int i = 0; i < MAXD; i++) memset(mat[2][i], 0, sizeof mat[2][i]);
  for (int i = 0; i < MAXD; i++)
    for (int j = 0; j < MAXD; j++)
      for (int k = 0; k < MAXD; k++)
        mat[2][i][j] = sum(mat[2][i][j], mul(mat[a][i][k], mat[b][k][j]));
  for (int i = 0; i < MAXD; i++)
    for (int j = 0; j < MAXD; j++) mat[b][i][j] = mat[2][i][j];
}
void Pow(int a) {
  for (; a; a >>= 1) {
    if (a & 1) {
      matmul(0, 1);
    }
    matmul(0, 0);
  }
}
int main() {
  scanf("%d%d", &n, &x);
  cnt[0] = 1;
  for (int i = 0; i < n; i++) {
    int a;
    scanf("%d", &a);
    cnt[a]++;
  }
  f[0] = 1;
  for (int i = 0; i + 1 < MAXD; i++) {
    f[1 + i] = 1;
    for (int j = 1; j <= i; j++)
      f[1 + i] = sum(f[1 + i], mul(f[1 + i - j], cnt[j]));
  }
  if (x + 1 < MAXD) {
    printf("%d\n", f[x + 1]);
    return 0;
  }
  x -= MAXD - 2;
  for (int i = 0; i + 1 < MAXD; i++) mat[0][0][i] = cnt[i + 1];
  mat[0][0][MAXD - 1] = cnt[0];
  for (int i = 1; i + 1 < MAXD; i++) mat[0][i][i - 1] = 1;
  mat[0][MAXD - 1][MAXD - 1] = cnt[0];
  for (int i = 0; i < MAXD; i++) mat[1][i][i] = 1;
  Pow(x);
  for (int i = 0; i < MAXD; i++)
    ans = sum(ans, mul(mat[1][0][i], f[MAXD - 1 - i]));
  printf("%d\n", ans);
}
