func_code_string: #include <bits/stdc++.h>   using namespace std;   int mod = 1e9 + 7;   int w[1007];   int n, x;   int d[107];   int N = 101;   int mat[107][107];   void mNoz(int (&a)[107][107], int (&b)[107][107], int (&c)[107][107]) {     long long res[107][107];     for (int i = 1; i <= N; ++i)       for (int j = 1; j <= N; ++j) res[i][j] = 0;     for (int i = 1; i <= N; ++i)       for (int k = 1; k <= N; ++k)         for (int j = 1; j <= N; ++j)           res[i][j] += ((long long)a[i][k] * b[k][j]) % mod;     for (int i = 1; i <= N; ++i)       for (int j = 1; j <= N; ++j) c[i][j] = res[i][j] % mod;   }   void pot(int (&a)[107][107], int (&c)[107][107], int k) {     int res[107][107];     for (int i = 1; i <= N; ++i)       for (int j = 1; j <= N; ++j) res[i][j] = i == j;     while (k > 0) {       if (k & 1) mNoz(res, a, res);       mNoz(a, a, a);       k /= 2;     }     for (int i = 1; i <= N; ++i)       for (int j = 1; j <= N; ++j) c[i][j] = res[i][j];   }   int main() {     ios_base::sync_with_stdio(0);     cin >> n >> x;     for (int i = 1; i <= n; ++i) {       int a;       cin >> a;       mat[1][a]++;     }     mat[1][N] = mat[N][N] = 1;     for (int i = 1; i + 1 < N; ++i) mat[i + 1][i] = 1;     pot(mat, mat, x);     int wyn = mat[1][1] + mat[1][N];     wyn %= mod;     cout << wyn << endl;     return 0;   }   