#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<long long> a, b;
long long sa = 0, sb = 0;
vector<pair<long long, pair<int, int> > > sub;
bool valid(int i, int j) {
  return (sub[i].second.first != sub[j].second.first and
          sub[i].second.second != sub[j].second.second);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    long long x;
    scanf("%lld", &x);
    a.push_back(x);
    sa += x;
  }
  scanf("%d", &m);
  for (int i = 0; i < m; i++) {
    long long x;
    scanf("%lld", &x);
    b.push_back(x);
    sb += x;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      sub.push_back(make_pair(2LL * (a[i] - b[j]), make_pair(i, j)));
    }
  }
  sub.push_back(make_pair(0LL, make_pair(-1, -1)));
  sort(sub.begin(), sub.end());
  long long ans0, ans1, ans2;
  int si, sj, si2, sj2, si3, sj3;
  ans0 = abs(sb - sa);
  ans1 = -1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      long long newsa = sa - a[i] + b[j];
      long long newsb = sb - b[j] + a[i];
      if (ans1 == -1 or abs(newsa - newsb) < ans1) {
        ans1 = abs(newsa - newsb);
        si = i;
        sj = j;
      }
    }
  }
  long long key = sa - sb;
  long long res = 0;
  int start = 0, end = sub.size() - 1;
  while (start < end) {
    long long cur = sub[start].first + sub[end].first;
    if (valid(start, end) and abs(cur - key) < abs(res - key)) {
      res = cur;
      si2 = sub[start].second.first;
      sj2 = sub[start].second.second;
      si3 = sub[end].second.first;
      sj3 = sub[end].second.second;
    }
    if (cur < key)
      start++;
    else if (cur > key)
      end--;
    else
      break;
  }
  ans2 = abs(sb - sa + res);
  long long ans = min(ans0, min(ans1, ans2));
  printf("%lld\n", ans);
  if (ans == ans0)
    printf("0\n");
  else if (ans == ans1)
    printf("1\n%d %d\n", si + 1, sj + 1);
  else
    printf("2\n%d %d\n%d %d\n", si2 + 1, sj2 + 1, si3 + 1, sj3 + 1);
  return 0;
}
