#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int N = 105;
void add(int &a, int b) {
  a += b;
  if (a >= mod) a -= mod;
}
struct Mat {
  int mat[N][N];
  void init() { memset(mat, 0, sizeof(mat)); }
  void getE() {
    init();
    for (int i = 1; i <= 101; i++) mat[i][i] = 1;
  }
  Mat operator*(const Mat &a) const {
    Mat ret;
    ret.init();
    for (int i = 1; i <= 101; i++)
      for (int j = 1; j <= 101; j++)
        for (int k = 1; k <= 101; k++)
          add(ret.mat[i][k], (long long)mat[i][j] * a.mat[j][k] % mod);
    return ret;
  }
  void output() {
    for (int i = 1; i <= 10; i++) {
      for (int j = 1; j <= 10; j++) printf("%d ", mat[i][j]);
      printf("\n");
    }
    printf("************\n");
  }
};
Mat operator^(Mat a, int b) {
  Mat ret;
  ret.getE();
  while (b) {
    if (b & 1) ret = ret * a;
    a = a * a;
    b >>= 1;
  }
  return ret;
}
Mat A, ret, C;
int n, x;
int d[N];
void solve() {
  int t;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &t);
    d[t]++;
  }
  C.init();
  for (int i = 2; i <= 100; i++) C.mat[i][i - 1] = 1;
  for (int i = 1; i <= 100; i++) C.mat[1][i] = d[i];
  C.mat[1][101] = 1;
  C.mat[101][101] = 1;
  A.init();
  A.mat[1][1] = 1;
  ret = A * (C ^ (x + 1));
  printf("%d\n", ret.mat[1][101]);
}
int main() {
  while (~scanf("%d%d", &n, &x)) solve();
  return 0;
}
