#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 7;
const int MOD = 1e9 + 7;
struct matrica {
  vector<vector<long long> > v;
  matrica() {
    vector<long long> tmp(102, 0);
    v.resize(102, tmp);
  }
};
int n, x;
int dist[MAXN];
matrica mat, poc;
matrica kvadrat(const matrica &a, const matrica &b) {
  matrica c;
  for (int i = 0; i < 102; i++) {
    for (int j = 0; j < 102; j++) {
      for (int k = 0; k < 102; k++)
        c.v[i][j] = (c.v[i][j] + (a.v[i][k] * b.v[k][j]) % MOD) % MOD;
    }
  }
  return c;
}
matrica spoji(const matrica &a, const matrica &b) {
  matrica c;
  for (int i = 0; i < 102; i++) {
    for (int j = 0; j < 102; j++)
      c.v[i][0] = (c.v[i][0] + (a.v[j][0] * b.v[i][j]) % MOD) % MOD;
  }
  return c;
}
matrica pot(matrica const &a, int e) {
  if (e == 1) return a;
  matrica rez = pot(a, e / 2);
  if (e % 2 == 0)
    return kvadrat(rez, rez);
  else
    return kvadrat(kvadrat(rez, rez), a);
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  cin >> n >> x;
  for (int i = 0; i < n; i++) cin >> dist[i];
  for (int i = 0; i < 100; i++) mat.v[i][0] = 0;
  mat.v[100][0] = 1;
  mat.v[101][0] = 1;
  for (int i = 0; i < 102; i++) {
    for (int j = 0; j < 102; j++) poc.v[i][j] = 0;
    if (i <= 99) poc.v[i][i + 1] = 1;
  }
  poc.v[101][101] = 1;
  for (int i = 0; i < n; i++) {
    poc.v[100][100 - dist[i] + 1]++;
    poc.v[101][100 - dist[i] + 1]++;
  }
  if (x == 0)
    cout << mat.v[101][0];
  else
    cout << spoji(mat, pot(poc, x)).v[101][0];
  return 0;
}
