func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long C = 1000000007;   long long pow1(long long x, long long y, long long z) {     if (y == 0) {       return 1;     }     if (y % 2 == 0) {       return pow1(x * x % z, y / 2, z);     }     return pow1(x, y - 1, z) * x % z;   }   signed main() {     ios::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     long long n, k, t = 0, r = 0;     cin >> n >> k;     for (long long q = 0; q < n; q++) {       long long w;       cin >> w;       if (w == 50) {         t++;       } else {         r++;       }     }     long long c[51][51];     for (long long q = 0; q <= 50; q++) {       c[0][q] = 1;       for (long long q1 = 1; q1 <= q; q1++) {         c[q1][q] = c[q1 - 1][q] * (q - q1 + 1) % C * pow1(q1, C - 2, C) % C;       }     }     long long d[5 * n + 2][t + 1][r + 1];     for (long long q = 0; q < 5 * n + 2; q++) {       for (long long q1 = 0; q1 <= t; q1++) {         fill(d[q][q1], d[q][q1] + r + 1, 0);       }     }     d[0][0][0] = 1;     bool flag = true;     for (long long q = 0; q <= 5 * n; q++) {       if (q % 2 == 1) {         for (long long q1 = 0; q1 <= t; q1++) {           for (long long q2 = 0; q2 <= r; q2++) {             d[q][q1][q2] %= C;             for (long long q3 = 0; q3 <= q1; q3++) {               for (long long q4 = 0; q4 <= q2; q4++) {                 if ((q1 - q3) * 50 + (q2 - q4) * 100 <= k && q1 - q3 + q2 - q4) {                   d[q + 1][q3][q4] +=                       d[q][q1][q2] * c[q1 - q3][q1] % C * c[q2 - q4][q2] % C;                 }               }             }           }         }       } else {         for (long long q1 = 0; q1 <= t; q1++) {           for (long long q2 = 0; q2 <= r; q2++) {             d[q][q1][q2] %= C;             for (long long q3 = q1; q3 <= t; q3++) {               for (long long q4 = q2; q4 <= r; q4++) {                 if ((q3 - q1) * 50 + (q4 - q2) * 100 <= k && q3 - q1 + q4 - q2) {                   d[q + 1][q3][q4] += d[q][q1][q2] * c[q3 - q1][t - q1] % C *                                       c[q4 - q2][r - q2] % C;                 }               }             }           }         }       }       if (d[q][t][r] > 0) {         cout << q <<   n  << d[q][t][r] <<   n ;         flag = false;         break;       }     }     if (flag) {       cout << -1 <<   n  << 0 <<   n ;     }     return 0;   }   