#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110, MOD = 1e9 + 7, N = 1e5 + 10;
const int sad = 100, nv = 99;
int n, x, d[N], cnt[MAXN];
long long mat[MAXN][MAXN], ans[MAXN][MAXN], tmp[MAXN][MAXN];
inline void mul(long long m1[MAXN][MAXN], long long m2[MAXN][MAXN]) {
  for (int i = 0; i <= 100; i++)
    for (int j = 0; j <= 100; j++) tmp[i][j] = 0;
  for (int i = 0; i <= 100; i++)
    for (int j = 0; j <= 100; j++)
      for (int k = 0; k <= 100; k++)
        tmp[i][j] = (tmp[i][j] + m1[i][k] * m2[k][j] % MOD) % MOD;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> x;
  for (int i = 0; i < n; i++) cin >> d[i], cnt[d[i]]++;
  for (int i = 1; i < sad; i++) {
    ans[i][i - 1] = 1;
  }
  for (int i = 0; i < sad; i++) {
    ans[i][nv] = cnt[sad - i], ans[i][sad] = cnt[sad - i];
  }
  for (int i = 0; i <= sad; i++) mat[i][i] = 1;
  ans[sad][sad] = 1;
  while (x) {
    if (x % 2) {
      mul(mat, ans);
      memcpy(mat, tmp, sizeof tmp);
    }
    mul(ans, ans);
    memcpy(ans, tmp, sizeof tmp);
    x /= 2;
  }
  cout << (mat[nv][sad] + mat[sad][sad]) % MOD << endl;
  return 0;
}
