#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
struct mat {
  long long _[105][105];
  int n;
  mat(int m) { init(m); }
  void init(int m) {
    n = m;
    memset(_, 0, sizeof _);
  }
  long long *operator[](int id) { return _[id]; }
  mat friend operator*(mat A, mat B) {
    mat C(A.n);
    int i, j, k, n = A.n;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++)
        if (A[i][j])
          for (k = 0; k < n; k++) C[i][k] += A[i][j] * B[j][k] % MOD;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++) C[i][j] %= MOD;
    return C;
  }
  mat operator^(long long m) {
    mat C(n), B = *this;
    for (int i = 0; i < n; i++) C[i][i] = 1;
    while (m) {
      if (m & 1) C = C * B;
      B = B * B;
      m >>= 1;
    }
    return C;
  }
};
int F[105];
int main() {
  int i, j, k;
  int n, x;
  while (~scanf("%d%d", &n, &x)) {
    memset(F, 0, sizeof F);
    int m = 101;
    mat E(m);
    for (i = 0; i < m; i++) E[i][i] = 1;
    mat A(m);
    for (i = 0; i < n; i++) {
      scanf("%d", &j);
      F[j]++;
    }
    for (k = 1; k <= 100; k++) A[0][k - 1] += F[k];
    for (j = 1; j < 100; j++) A[j][j - 1] = 1;
    A[100][100] = 1;
    A[100][0] = 1;
    E = A ^ (x + 1);
    cout << E[100][0] << "\n";
  }
  return 0;
}
