#include <bits/stdc++.h>
using namespace std;
const int M = 1e5 + 100, N = 9, P_2 = 1 << N;
int n, m, c[M], dp[P_2];
int maxi = -1, A, B;
vector<int> vec[P_2];
void check(int DP, int a, int b) {
  if (pair<int, int>(DP, -c[a] - c[b]) > pair<int, int>(maxi, -c[A] - c[B]))
    maxi = DP, A = a, B = b;
}
int get_mask_2() {
  int mask = 0, cnt, dex;
  cin >> cnt;
  while (cnt--) {
    cin >> dex;
    mask |= 1 << (dex - 1);
  }
  return mask;
}
void upd(int mask) {
  for (int i = P_2 - 1; i >= mask; i--)
    if ((i & mask) == mask) dp[i]++;
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  cin >> n >> m;
  while (n--) upd(get_mask_2());
  for (int i = 0; i < m; i++) {
    cin >> c[i];
    vec[get_mask_2()].push_back(i);
  }
  for (int mask = 0; mask < P_2; mask++) {
    sort(vec[mask].begin(), vec[mask].end(),
         [](int a, int b) { return c[a] < c[b]; });
    if (vec[mask].size() >= 2) check(dp[mask], vec[mask][0], vec[mask][1]);
  }
  for (int a = 0; a < P_2; a++)
    for (int b = a + 1; b < P_2; b++)
      if (vec[a].size() && vec[b].size())
        check(dp[a | b], vec[a][0], vec[b][0]);
  cout << ++A << ' ' << ++B;
  return 0;
}
