#include <bits/stdc++.h>
using namespace std;
const int M = 1000000007;
const int MM = 998244353;
const long double PI = acos(-1);
long long power(long long b, long long e, long long m) {
  if (e == 0) return 1;
  if (e & 1) return b * power(b * b % m, e / 2, m) % m;
  return power(b * b % m, e / 2, m);
}
long long power(long long b, long long e) {
  if (e == 0) return 1;
  if (e & 1) return b * power(b * b, e / 2);
  return power(b * b, e / 2);
}
template <typename T, typename U>
static inline void amin(T &x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
static inline void amax(T &x, U y) {
  if (x < y) x = y;
}
template <typename T, typename U>
ostream &operator<<(ostream &os, const pair<T, U> &p) {
  return os << '(' << p.first << "," << p.second << ')';
}
long long ans = 0;
const int N = 300005;
int p[N], r[N], a[N], b[N];
int parent(int i) { return p[i] = (p[i] == i) ? i : parent(p[i]); }
void merge(int x, int y, long long w) {
  x = parent(x);
  y = parent(y);
  if (x == y) {
    ans += w;
    return;
  }
  if (r[x] > r[y])
    p[y] = x;
  else
    p[x] = y;
  if (r[x] == r[y]) ++r[y];
}
struct E {
  int x, y;
  long long w;
};
int _runtimeTerror_() {
  int m, n;
  cin >> m >> n;
  vector<E> ed;
  for (int i = 1; i <= n + m; ++i) p[i] = i, r[i] = 0;
  for (int i = 1; i <= m; ++i) cin >> a[i];
  for (int i = 1; i <= n; ++i) cin >> b[i];
  for (int i = 1; i <= m; ++i) {
    int second;
    cin >> second;
    while (second--) {
      int x;
      cin >> x;
      E e;
      e.x = i + n;
      e.y = x;
      e.w = a[i] + b[x];
      ed.push_back(e);
    }
  }
  sort(ed.begin(), ed.end(), [&](E x, E y) { return x.w > y.w; });
  for (auto &j : ed) {
    merge(j.x, j.y, j.w);
  }
  cout << ans;
  return 0;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int TESTS = 1;
  while (TESTS--) _runtimeTerror_();
  return 0;
}
