#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
long long int fact[1000001];
long long int modInv[1000001];
long long int power(long long int base, long long int p) {
  long long ans = 1;
  base = base % MOD;
  while (p > 0) {
    if (p & 1) ans = (ans * base) % MOD;
    p = p >> 1;
    base = (base * base) % MOD;
  }
  return ans;
}
void factInit() {
  fact[0] = 1;
  modInv[0] = 1;
  for (long long int i = 1; i < 1000001; i++) {
    fact[i] = (fact[i - 1] * i) % MOD;
    modInv[i] = power(fact[i], MOD - 2) % MOD;
  }
}
void solve() {
  long long int n, m, k, i, j, temp, temp2;
  cin >> n >> k >> m;
  string s[n], msg[m];
  vector<long long int> cost(n);
  map<string, long long int> mp;
  for (i = 0; i < n; i++) {
    cin >> s[i];
    mp[s[i]] = i;
  }
  for (i = 0; i < n; i++) {
    cin >> cost[i];
  }
  vector<vector<long long int>> tempv(k);
  for (i = 0; i < k; i++) {
    cin >> temp;
    for (j = 0; j < temp; j++) {
      cin >> temp2;
      temp2--;
      tempv[i].push_back(temp2);
    }
  }
  for (i = 0; i < m; i++) {
    cin >> msg[i];
  }
  for (i = 0; i < k; i++) {
    long long int mini = 10e17;
    long long int idx = -1;
    for (j = 0; j < tempv[i].size(); j++) {
      if (cost[tempv[i][j]] < mini) {
        idx = tempv[i][j];
        mini = cost[tempv[i][j]];
      }
    }
    for (j = 0; j < tempv[i].size(); j++) {
      cost[tempv[i][j]] = cost[idx];
    }
  }
  long long int ans = 0;
  for (i = 0; i < m; i++) {
    ans += cost[mp[msg[i]]];
  }
  cout << ans << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int t = 1;
  while (t--) {
    solve();
  }
}
