#include <bits/stdc++.h>
using namespace std;
long long int gcd(long long int a, long long int b) {
  return (b == 0LL ? a : gcd(b, a % b));
}
long double dist(long double x, long double arayikhalatyan, long double x2,
                 long double y2) {
  return sqrt((x - x2) * (x - x2) +
              (arayikhalatyan - y2) * (arayikhalatyan - y2));
}
long long int S(long long int a) { return (a * (a + 1LL)) / 2; }
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
char vow[] = {'a', 'e', 'i', 'o', 'u'};
int dx[] = {0, -1, 0, 1, -1, -1, 1, 1, 0};
int dy[] = {-1, 0, 1, 0, -1, 1, -1, 1, 0};
const int N = 1e6 + 20;
const long long int mod = 1e9 + 7;
const long double pi = acos(-1);
const int T = 238;
const long double e = 1e-13;
long long int bp(long long int a, long long int b = mod - 2LL) {
  long long int ret = 1;
  while (b) {
    if (b & 1) ret *= a, ret %= mod;
    a *= a;
    a %= mod;
    b >>= 1;
  }
  return ret;
}
ostream& operator<<(ostream& c, pair<int, int> a) {
  c << a.first << " " << a.second;
  return c;
}
struct pt {
  long long int x, y;
  int ind;
  int bl;
  bool operator==(const pt& a) { return ind == a.ind; }
  bool operator<(const pt& b) {
    if (x == b.x) return y < b.y;
    return x < b.x;
  }
};
int n, m;
long long int pat;
priority_queue<pair<long long int, pair<int, int> > > q;
long long int a[N], b[N];
int p[N];
int gp(int x) {
  if (x == p[x]) return x;
  return p[x] = gp(p[x]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> m >> n;
  for (int i = 1; i <= m; i++) cin >> a[i], p[i] = i;
  for (int j = 1; j <= n; j++) cin >> b[j], p[j + m] = j + m;
  for (int i = 1; i <= m; i++) {
    int x;
    cin >> x;
    while (x--) {
      int s;
      cin >> s;
      pat += a[i] + b[s];
      q.push(make_pair(a[i] + b[s], make_pair(i, s + m)));
    }
  }
  while (!q.empty()) {
    auto p1 = q.top();
    q.pop();
    if (gp(p1.second.first) == gp(p1.second.second)) continue;
    p[gp(p1.second.first)] = gp(p1.second.second);
    pat -= p1.first;
  }
  cout << pat << endl;
  return 0;
}
