func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, arr[26], s, k, fuck[19], ans;   vector<pair<long long, long long> > v1;   map<pair<long long, long long>, long long> maph;   void rek(long long x, long long r, long long z, long long o, bool p) {     if (x >= r) {       if (!p)         v1.push_back({z, o});       else         maph[{z, o}]++;       return;     }     if (arr[x] + z <= s) rek(x + 1, r, z + arr[x], o, p);     if (o < k and arr[x] <= 18 and z + fuck[arr[x]] <= s)       rek(x + 1, r, z + fuck[arr[x]], o + 1, p);     rek(x + 1, r, z, o, p);   }   int main() {     cin >> n >> k >> s;     fuck[0] = 1;     for (int i = 1; i <= 18; i++) fuck[i] = fuck[i - 1] * i;     for (int i = 0; i < n; i++) cin >> arr[i];     rek(0, n / 2, 0, 0, 0), rek(n / 2, n, 0, 0, 1);     for (int i = 0; i < v1.size(); i++) {       for (int j = 0; j <= k - v1[i].second; j++) {         if (maph.find({s - v1[i].first, j}) != maph.end())           ans += maph[{s - v1[i].first, j}];       }     }     cout << ans;   }   