#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse4")
using namespace std;
const double PI = acos(-1.0);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long find_parent(long long parent[], long long a) {
  if (parent[a] >= 0)
    return parent[a] = find_parent(parent, parent[a]);
  else
    return a;
}
void merge_sets(long long parent[], long long a, long long b) {
  long long p1 = find_parent(parent, a), p2 = find_parent(parent, b);
  if (p1 == p2) return;
  if (abs(parent[p1]) < abs(parent[p2])) swap(p1, p2);
  parent[p1] -= abs(parent[p2]);
  parent[p2] = p1;
}
const long long N = 1e5 + 10;
long long a[N], b[N];
long long n, m;
vector<pair<long long, long long>> v;
vector<long long> cur[N];
long long parent[N];
bool cmp(pair<long long, long long> p, pair<long long, long long> q) {
  long long cst1 = a[p.first] + b[p.second];
  long long cst2 = a[q.first] + b[q.second];
  return cst1 > cst2;
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> m >> n;
  memset(parent, -1, sizeof(parent));
  ;
  for (long long i = 1; i <= m; i++) {
    cin >> a[i];
  }
  for (long long j = 1; j <= n; j++) {
    cin >> b[j];
  }
  long long tot = 0;
  for (long long i = 1; i <= m; i++) {
    long long s;
    cin >> s;
    for (long long j = 0; j < s; j++) {
      long long x;
      cin >> x;
      v.push_back({i, x});
      tot += a[i] + b[x];
    }
  }
  sort(v.begin(), v.end(), cmp);
  for (auto x : v) {
    long long ind = x.second;
    if (cur[x.first].empty() ||
        find_parent(parent, cur[x.first].back()) != find_parent(parent, ind)) {
      if (!cur[x.first].empty()) {
        merge_sets(parent, cur[x.first].back(), ind);
      }
      cur[x.first].push_back(x.second);
      tot -= (a[x.first] + b[x.second]);
    }
  }
  cout << tot << "\n";
}
