#include <bits/stdc++.h>
const long long INF = LLONG_MAX / 10;
using namespace std;
const long long dx[9] = {-1, 0, 0, 1, -1, -1, 1, 1, 0};
const long long dy[9] = {0, -1, 1, 0, -1, 1, -1, 1, 0};
long long n, k, m;
string words[101010];
long long cost[101010];
class UnionFind {
 private:
  vector<long long> par;
  vector<long long> myRank;
  vector<long long> cnt;
  vector<long long> cost;

 public:
  UnionFind(long long n) {
    par.resize(n);
    myRank.resize(n);
    cnt.resize(n);
    cost.resize(n);
    for (long long i = 0; i < (n); i++) {
      par[i] = i;
      myRank[i] = 0;
      cnt[i] = 1;
      cost[i] = 0;
    }
  }
  void set_cost(long long x, long long c) { cost[x] = c; }
  long long find(long long x) {
    if (par[x] == x)
      return x;
    else
      return par[x] = find(par[x]);
  }
  void unite(long long x, long long y) {
    x = find(x);
    y = find(y);
    if (x == y) return;
    if (myRank[x] < myRank[y]) {
      par[x] = y;
      cnt[y] += cnt[x];
      if (cost[x] < cost[y]) cost[y] = cost[x];
    } else {
      par[y] = x;
      cnt[x] += cnt[y];
      if (myRank[x] == myRank[y]) myRank[x]++;
      if (cost[x] > cost[y]) cost[x] = cost[y];
    }
  }
  bool same(long long x, long long y) { return find(x) == find(y); }
  long long count(long long x) { return cnt[find(x)]; }
  long long get_cost(long long x) { return cost[find(x)]; }
};
map<string, long long> idx;
signed main() {
  cin >> n >> k >> m;
  for (long long i = 0; i < (n); i++) {
    cin >> words[i + 1];
    idx[words[i + 1]] = i + 1;
  }
  UnionFind uf(n + 1);
  for (long long i = 0; i < (n); i++) {
    cin >> cost[i + 1];
    uf.set_cost(i + 1, cost[i + 1]);
  }
  for (long long i = 0; i < (k); i++) {
    long long num;
    cin >> num;
    long long first;
    for (long long j = 0; j < (num); j++) {
      if (j == 0) {
        cin >> first;
      } else {
        long long temp;
        cin >> temp;
        uf.unite(first, temp);
      }
    }
  }
  long long ans = 0;
  for (long long i = 0; i < (m); i++) {
    string w;
    cin >> w;
    ans += uf.get_cost(idx[w]);
  }
  cout << ans << endl;
}
