#include <bits/stdc++.h>
using namespace std;
long long int pw(long long int a, long long int b, long long int mod) {
  if (!b) return 1;
  if (b & 1) return a * pw(a * a % mod, b / 2, mod) % mod;
  return pw(a * a % mod, b / 2, mod) % mod;
}
const long long int N = 1e5 + 10;
const long long int M = 101;
const long long int MOD = 1e9 + 7;
const long long int INF = 1e18;
vector<vector<long long int>> makeMat(int n, int m) {
  return vector<vector<long long int>>(n, vector<long long int>(m));
}
vector<vector<long long int>> operator*(
    const vector<vector<long long int>>& a,
    const vector<vector<long long int>>& b) {
  int n = a.size(), m = a[0].size(), c = b[0].size();
  vector<vector<long long int>> res = makeMat(n, c);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)
      for (int k = 0; k < c; k++)
        res[i][k] = (res[i][k] + a[i][j] * b[j][k] % MOD) % MOD;
  return res;
}
vector<vector<long long int>>& operator*=(
    vector<vector<long long int>>& a, const vector<vector<long long int>>& b) {
  return a = a * b;
}
vector<vector<long long int>> pw(vector<vector<long long int>> m,
                                 long long int p) {
  int n = m.size();
  vector<vector<long long int>> res = makeMat(n, n);
  for (int i = 0; i < n; i++) res[i][i] = 1;
  for (; p; p /= 2, m *= m)
    if (p & 1) res *= m;
  return res;
}
long long int n, x, cnt[M];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  cin >> n >> x;
  for (int i = 0; i < n; i++) {
    int y;
    cin >> y;
    cnt[y]++;
  }
  vector<vector<long long int>> A = makeMat(M, 1);
  A[0][0] = A[M - 1][0] = 1;
  vector<vector<long long int>> B = makeMat(M, M);
  for (int i = 1; i <= 100; i++) B[0][i - 1] = cnt[i];
  B[0][M - 1] = 1;
  for (int j = 1; j < M - 1; j++) B[j][j - 1] = 1;
  B[M - 1][M - 1] = 1;
  vector<vector<long long int>> C = pw(B, x) * A;
  cout << C[0][0] << '\n';
  return 0;
}
