func_code_string: #include <bits/stdc++.h>   using namespace std;   const int P = 1e9 + 7;   int p[11];   vector<int> operator*(const vector<int> &lhs, const vector<int> &rhs) {     vector<int> ret;     ret.resize(lhs.size() + rhs.size() - 1, 0);     for (int i = 0; i < lhs.size(); i++) {       for (int j = 0; j < rhs.size(); j++) {         ret[i + j] = (ret[i + j] + lhs[i] * 1LL * rhs[j]) % P;       }     }     return ret;   }   vector<int> operator+(const vector<int> &lhs, const vector<int> &rhs) {     vector<int> ret;     ret.resize(max(lhs.size(), rhs.size()), 0);     for (int i = 0; i < ret.size(); i++)       ret[i] =           ((i < lhs.size() ? lhs[i] : 0) + (i < rhs.size() ? rhs[i] : 0)) % P;     return ret;   }   vector<int> modExp(vector<int> &a, long long m, vector<int> &c) {     int n = a.size();     vector<int> ret(n, 0);     ret[0] = 1;     if (m == 0) return ret;     for (int i = 63 - __builtin_clz(m); i >= 0; i--) {       ret = ret * ret;       if (m >> i & 1) ret = ret * a;       for (int i = (int)ret.size() - 1; i >= n; i--)         if (ret[i]) {           for (int j = 0; j < n; j++)             if (c[j]) ret[i - j - 1] = (ret[i - j - 1] + ret[i] * 1LL * c[j]) % P;         }       ret.resize(n);     }     return ret;   }   int main() {     int F, B;     long long N;     cin >> F >> B >> N;     for (int i = 1; i <= F; i++) cin >> p[i];     vector<int> a(250, 0), b(250, 0), c(250, 0);     for (int i = 1; i <= B; i++) {       int x;       cin >> x;       c[x - 1]++;     }     b[0] = 1;     for (int i = 1; i < 250; i++) {       for (int j = 0; j < i; j++) b[i] = (b[i] + b[i - j - 1] * 1LL * c[j]) % P;     }     a[1] = 1;     vector<int> d(250, 0);     for (int i = 1; i <= F; i++) d = d + modExp(a, p[i], c);     d = modExp(d, N, c);     int ans = 0;     for (int i = 0; i < 250; i++) ans = (ans + d[i] * 1LL * b[i]) % P;     cout << ans << endl;     return 0;   }   