#include <bits/stdc++.h>
using namespace std;
inline int IN() {
  char c;
  register int first = 0;
  for (; (c = getchar()) < 48 && c ^ '-' || c > 57;)
    ;
  bool f = c == '-';
  if (f) (c = getchar());
  for (; c > 47 && c < 58; (c = getchar())) first = first * 10 + c - 48;
  if (f) first = -first;
  return first;
}
const long long inf = 1e9, INF = 1e17;
int n, S, T, tot, he[666], g[666], ne[666666], pp[666666], dis[666666];
long long an, ee[666666];
inline void Add(int u, int v, long long e) {
  pp[++tot] = v;
  ne[tot] = he[u];
  he[u] = tot;
  ee[tot] = e;
  pp[++tot] = u;
  ne[tot] = he[v];
  he[v] = tot;
}
inline bool bfs() {
  for (int _r = T, i = 1; i <= _r; ++i) dis[i] = inf;
  dis[S] = 0;
  int l = 0, r = 1;
  for (g[l] = S; l < r; ++l) {
    int u = g[l];
    for (int e = he[u]; e; e = ne[e])
      if (ee[e] > 0) {
        int v = pp[e];
        if (dis[v] > dis[u] + 1) {
          dis[g[r++] = v] = dis[u] + 1;
          if (v == T) return 1;
        }
      }
  }
  return 0;
}
long long dinic(int u, long long ff) {
  if (u == T || ff <= 0) return max(ff, 0ll);
  long long an = 0;
  for (int e = he[u]; e; e = ne[e])
    if (dis[pp[e]] == dis[u] + 1) {
      long long tmp = dinic(pp[e], min(ff, ee[e]));
      ff -= tmp;
      an += tmp;
      ee[e] -= tmp;
      ee[e ^ 1] += tmp;
    }
  return an ? an : (dis[u] = -1, 0ll);
}
int main() {
  n = IN();
  T = n << 1 | 1;
  tot = 1;
  for (int _r = n, i = 1; i <= _r; ++i) {
    int _ = IN();
    for (int _r = _, j = 0; j < _r; ++j) Add(i, IN() + n, INF);
  }
  for (int _r = n, i = 1; i <= _r; ++i) {
    int xx = inf - IN();
    Add(S, i, xx);
    an += xx;
  }
  for (int _r = n, i = 1; i <= _r; ++i) Add(i + n, T, inf);
  for (; bfs();) an -= dinic(S, INF);
  printf("%I64d\n", -an);
}
