#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("-O2")
const int LIM = 1e5 + 5, MOD = 1e9 + 7;
long long INF = 1e17;
int t, n, m, k, x, y;
int a[LIM], h[12];
map<int, int> mpp;
long long solve(int sum, int var) {
  sum = min(sum, k * var);
  long long dp[sum + 1][var + 1];
  for (int j = 0; j < sum + 1; j++) {
    if (j > k)
      dp[j][1] = -INF;
    else
      dp[j][1] = h[j];
  }
  for (int i = 2; i < var + 1; i++) {
    for (int j = 0; j < sum + 1; j++) {
      long long curr = -INF;
      for (int l = 0; l < j + 1; l++) {
        if (l > k) break;
        curr = max(curr, h[l] + dp[j - l][i - 1]);
      }
      dp[j][i] = curr;
    }
  }
  return dp[sum][var];
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n * k; i++) cin >> x, a[x]++;
  for (int i = 0; i < n; i++) cin >> x, mpp[x]++;
  for (int i = 0; i < k; i++) cin >> h[i + 1];
  long long ans = 0;
  for (auto &it : mpp) {
    ans += solve(a[it.first], it.second);
  }
  cout << ans;
  return 0;
}
