B. Mahmoud and Ehab and the message | Codeforces Round #473 (Div. 2)

int N, K, M;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed << setprecision(20);

    cin >> N >> K >> M;

    // 各単語の番号
    map<string, int> id;
    rep(i, N) {
        string s; cin >> s;
        id[s] = i;
    }

    // 各単語の送信コスト
    vi A(N);
    rep(i, N)cin >> A[i];

    // そのグループに属す単語で最小のコスト
    vi cost(K, INT_MAX);
    map<int, int> g;
    rep(i, K) {
        int x; cin >> x;
        rep(j, x) {
            int k;
            cin >> k;
            --k;
            // 番号kの単語はグループiに属す
            g[k] = i;
            smin(cost[i], A[k]);
        }
    }

    ll ans = 0;
    rep(i, M) {
        string s;
        cin >> s;
        // 単語sと同じグループに属す単語で最小のコストを使う
        ans += cost[g[id[s]]];
    }
    cout << ans << endl;
}