#include #include #include int main() { using namespace std; int n, m; cin >> n >> m; atcoder::mf_graph mf(n + m + 2); int s = n + m, t = n + m + 1; for (int i = 0; i < n; i++) { long long a; cin >> a; mf.add_edge(i, t, a); } long long ans = 0; constexpr long long INF = 1e12; vector b(m); for (auto &e : b) { cin >> e; } for (int i = 0; i < m; i++) { int k; cin >> k; mf.add_edge(s, n + i, b[i]); ans += b[i]; while (k--) { int c; cin >> c; mf.add_edge(n + i, c - 1, INF); } } cout << ans - mf.flow(s, t) << endl; }