#include <bits/stdc++.h>
using namespace std;
const long long INF = 2e9 * 2000;
struct node {
  int x, y;
  long long v;
} A[2005 * 2005], B[2005 * 2005];
int n, m, ans1i, ans1j, ans2i, ans2j, lena, lenb;
long long suma, sumb, ans1 = INF, ans2 = INF, a[2005], b[2005];
long long fabs(long long x) {
  if (x < 0) return -x;
  return x;
}
bool cmp(node f, node g) { return f.v < g.v; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    suma += a[i] * 1ll;
  }
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) {
    scanf("%lld", &b[i]);
    sumb += b[i] * 1ll;
  }
  if (suma - sumb == 0) {
    printf("0\n0\n");
    return 0;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      long long tmp = fabs((suma - a[i] + b[j]) - (sumb - b[j] + a[i]));
      if (tmp < ans1) {
        ans1 = tmp, ans1i = i, ans1j = j;
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      A[++lena].v = a[i] + a[j], A[lena].x = i, A[lena].y = j;
    }
  }
  for (int i = 1; i <= m; i++) {
    for (int j = i + 1; j <= m; j++) {
      B[++lenb].v = b[i] + b[j], B[lenb].x = i, B[lenb].y = j;
    }
  }
  sort(A + 1, A + 1 + lena, cmp);
  sort(B + 1, B + 1 + lenb, cmp);
  for (int i = 1, j = 1; i <= lena && j <= lenb;) {
    long long tmp = fabs(suma - sumb - 2 * A[i].v + 2 * B[j].v);
    if (tmp < ans2) {
      ans2 = tmp, ans2i = i, ans2j = j;
    }
    if (suma - A[i].v + B[j].v < sumb - B[j].v + A[i].v)
      j++;
    else
      i++;
  }
  if (fabs(suma - sumb) <= ans1 && fabs(suma - sumb) <= ans2) {
    printf("%lld\n0\n", fabs(suma - sumb));
    return 0;
  }
  if (ans1 <= fabs(suma - sumb) && ans1 <= ans2) {
    printf("%lld\n1\n%d %d\n", ans1, ans1i, ans1j);
    return 0;
  }
  if (ans2 <= fabs(suma - sumb) && ans2 <= ans1) {
    printf("%lld\n2\n%d %d\n%d %d\n", ans2, A[ans2i].x, B[ans2j].x, A[ans2i].y,
           B[ans2j].y);
    return 0;
  }
  return 0;
}
