#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e5 + 10;
int b[N], f[N], c[N], K;
long long table[501][500 * 10 + 1];
int x;
long long g(int pos, int k) {
  if (!pos) return 0;
  if (!k) return 0;
  if (table[pos][k]) return table[pos][k];
  long long o = g(pos - 1, k);
  int i;
  for (i = 1; i < min(k, K) + 1; i++) {
    o = max(o, g(pos - 1, k - i) + c[i - 1]);
  }
  return table[pos][k] = o;
}
int main() {
  int n, i, a;
  cin >> n >> K;
  for (i = 0; i < n * K; i++) {
    scanf("%d", &a);
    a--;
    b[a]++;
  }
  for (i = 0; i < n; i++) {
    scanf("%d", &a);
    a--;
    f[a]++;
  }
  for (i = 0; i < K; i++) {
    scanf("%d", &c[i]);
  }
  long long o = 0;
  for (i = 0; i < 100001; i++) {
    if (f[i]) {
      o += g(f[i], b[i]);
    }
  }
  cout << o;
}
