func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   long long int dp[503][5030];   long long int cnt[100100];   long long int fav[100100];   int t[550];   int used[100100];   long long int h[15];   int main() {     cin.tie(nullptr);     ios::sync_with_stdio(false);     cin >> n >> m;     for (int i = 0; i < n * m; i++) {       int x;       cin >> x;       cnt[x]++;     }     for (int i = 0; i < n; i++) {       cin >> t[i];       fav[t[i]]++;     }     for (int i = 0; i < m; i++) {       cin >> h[i];     }     long long int ans = 0;     for (int i = 0; i < n; i++) {       if (used[t[i]]) continue;       used[t[i]] = 1;       cnt[t[i]] = min(cnt[t[i]], fav[t[i]] * (long long int)m);       for (int j = 0; j <= fav[t[i]]; j++) {         for (int k = 0; k <= cnt[t[i]]; k++) {           dp[j][k] = -1e15;         }       }       dp[0][0] = 0;       for (int j = 0; j < fav[t[i]]; j++) {         for (int k = 0; k <= cnt[t[i]]; k++) {           if (dp[j][k] < 0) continue;           for (int l = 0; l <= min((int)m, (int)cnt[t[i]] - k); l++) {             dp[j + 1][k + l] =                 max(dp[j + 1][k + l],                     dp[j][k] + (l == 0 ? 0 : (long long int)h[l - 1]));           }         }       }       long long int ma = 0;       for (int j = 0; j <= cnt[t[i]]; j++) {         ma = max(ma, dp[fav[t[i]]][j]);       }       ans += ma;     }     cout << ans << endl;   }   