#include <bits/stdc++.h>
using namespace std;
const int maxn = 2010;
int a[maxn], b[maxn], tot, n, m;
pair<int, int> ans1, ans21, ans22;
pair<long long, pair<int, int> > two[maxn * maxn];
int main(void) {
  long long s = 0, s2 = 1e18, s3 = 1e18;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), s += a[i];
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]), s -= b[i];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      long long tem = abs(s + 2 * b[j] - 2 * a[i]);
      if (tem < s2) s2 = tem, ans1 = make_pair(i, j);
    }
  for (int i = 1; i <= m; i++)
    for (int j = i + 1; j <= m; j++)
      two[++tot] = make_pair(2ll * b[i] + 2ll * b[j], make_pair(i, j));
  sort(two + 1, two + 1 + tot);
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      long long tmp = 2ll * a[i] + 2ll * a[j] - s;
      int p =
          lower_bound(two + 1, two + 1 + tot, make_pair(tmp, make_pair(0, 0))) -
          two - 1;
      for (int t = max(1, p - 2); t <= min(tot, p + 2); t++) {
        long long tem = abs(s + two[t].first - 2ll * a[i] - 2ll * a[j]);
        if (tem < s3) {
          s3 = tem;
          ans21 = make_pair(i, two[t].second.first);
          ans22 = make_pair(j, two[t].second.second);
        }
      }
    }
  long long ans = min(min(abs(s), abs(s2)), abs(s3));
  printf("%lld\n", ans);
  if (ans == s)
    printf("0\n");
  else if (ans == abs(s2))
    printf("1\n%d %d\n", ans1.first, ans1.second);
  else
    printf("2\n%d %d\n%d %d\n", ans21.first, ans21.second, ans22.first,
           ans22.second);
  return 0;
}
