#include <bits/stdc++.h>
using namespace std;
long long ara[2003], b[2003];
vector<pair<long long, pair<int, int> > > vec;
pair<int, int> bs(long long y, long long x, bool f) {
  pair<int, int> res;
  res = {-1, -1};
  if (f) {
    int lo = 1, hi = vec.size();
    while (lo <= hi) {
      int mid = (lo + hi) >> 1;
      long long z = vec[mid - 1].first;
      if ((x + z) <= y)
        res = vec[mid - 1].second, lo = mid + 1;
      else
        hi = mid - 1;
    }
  } else {
    int lo = 1, hi = vec.size();
    while (lo <= hi) {
      int mid = (lo + hi) >> 1;
      long long z = vec[mid - 1].first;
      if ((x + z) >= y)
        res = vec[mid - 1].second, hi = mid - 1;
      else
        lo = mid + 1;
    }
  }
  return res;
}
int main() {
  int n, m, k;
  long long tot1 = 0, tot2 = 0, diff;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lld", &ara[i]), tot1 += ara[i];
  scanf("%d", &m);
  for (int i = 1; i <= m; i++) scanf("%lld", &b[i]), tot2 += b[i];
  diff = abs(tot1 - tot2);
  k = 0;
  int ind1[5], ind2[5];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) {
      long long x = tot1 - ara[i] + b[j];
      long long y = tot2 - b[j] + ara[i];
      if (abs(x - y) < diff) diff = abs(x - y), k = 1, ind1[0] = i, ind2[0] = j;
    }
  if (min(n, m) >= 2) {
    for (int i = 1; i < m; i++)
      for (int j = i + 1; j <= m; j++)
        vec.push_back({2 * (b[i] + b[j]), {i, j}});
    sort(vec.begin(), vec.end());
    for (int i = 1; i < n; i++)
      for (int j = i + 1; j <= n; j++) {
        pair<int, int> p =
            bs(tot2 + ara[i] + ara[j], tot1 - ara[i] - ara[j], 1);
        if (p.first != -1) {
          long long d =
              abs((tot1 - ara[i] - ara[j] + b[p.first] + b[p.second]) -
                  (tot2 + ara[i] + ara[j] - b[p.first] - b[p.second]));
          if (d < diff) {
            diff = d;
            k = 2;
            ind1[0] = i, ind1[1] = j;
            ind2[0] = p.first, ind2[1] = p.second;
          }
        }
        p = bs(tot2 + ara[i] + ara[j], tot1 - ara[i] - ara[j], 0);
        if (p.first != -1) {
          long long d =
              abs((tot1 - ara[i] - ara[j] + b[p.first] + b[p.second]) -
                  (tot2 + ara[i] + ara[j] - b[p.first] - b[p.second]));
          if (d < diff) {
            diff = d;
            k = 2;
            ind1[0] = i, ind1[1] = j;
            ind2[0] = p.first, ind2[1] = p.second;
          }
        }
        p = bs(tot1 - ara[i] - ara[j], tot2 + ara[i] + ara[j], 1);
        if (p.first != -1) {
          long long d =
              abs((tot1 - ara[i] - ara[j] + b[p.first] + b[p.second]) -
                  (tot2 + ara[i] + ara[j] - b[p.first] - b[p.second]));
          if (d < diff) {
            diff = d;
            k = 2;
            ind1[0] = i, ind1[1] = j;
            ind2[0] = p.first, ind2[1] = p.second;
          }
        }
        p = bs(tot1 - ara[i] - ara[j], tot2 + ara[i] + ara[j], 0);
        if (p.first != -1) {
          long long d =
              abs((tot1 - ara[i] - ara[j] + b[p.first] + b[p.second]) -
                  (tot2 + ara[i] + ara[j] - b[p.first] - b[p.second]));
          if (d < diff) {
            diff = d;
            k = 2;
            ind1[0] = i, ind1[1] = j;
            ind2[0] = p.first, ind2[1] = p.second;
          }
        }
      }
  }
  printf("%lld\n", diff);
  printf("%d\n", k);
  for (int i = 0; i < k; i++) printf("%d %d\n", ind1[i], ind2[i]);
  return 0;
}
