#include <bits/stdc++.h>
using namespace std;
struct Data {
  long long value;
  int idx;
  Data(long long v, int i) : value{v}, idx{i} {}
  Data() : value{0}, idx{0} {}
};
int main() {
  int n;
  cin >> n;
  vector<Data> a(n + 1);
  for (int i = 1; i <= n; ++i) {
    a[i].idx = i;
    cin >> a[i].value;
  }
  int m;
  cin >> m;
  vector<Data> b(m + 1);
  for (int i = 1; i <= m; ++i) {
    b[i].idx = i;
    cin >> b[i].value;
  }
  sort(b.begin() + 1, b.end(),
       [](const Data& x, const Data& y) { return x.value < y.value; });
  int swapNum = 0;
  long long sum = 0;
  for (int i = 1; i <= n; ++i) {
    sum += a[i].value;
  }
  for (int i = 1; i <= m; ++i) {
    sum -= b[i].value;
  }
  long long opt = abs(sum);
  for (int i = 1; i <= m; ++i) b[i].value *= 2;
  pair<int, int> oneSwap;
  auto compareDataByValue = [](const Data& left, const Data& right) {
    return left.value < right.value;
  };
  for (int i = 1; i <= n; ++i) {
    long long diff;
    long long search = 2 * a[i].value - sum;
    auto bigger = lower_bound(b.begin() + 1, b.end(), Data(search, 0),
                              compareDataByValue);
    if (bigger == b.end()) --bigger;
    diff = abs(sum + bigger->value - 2 * a[i].value);
    if (diff < opt) {
      opt = diff;
      oneSwap = pair<int, int>(i, bigger->idx);
      swapNum = 1;
    }
    auto smaller = upper_bound(b.begin() + 1, b.end(), Data(search, 0),
                               compareDataByValue);
    if (smaller == b.end()) smaller = b.begin() + 1;
    diff = abs(sum + smaller->value - 2 * a[i].value);
    if (diff < opt) {
      opt = diff;
      oneSwap = pair<int, int>(i, smaller->idx);
      swapNum = 1;
    }
  }
  pair<int, int> fromA;
  pair<int, int> fromB;
  if (a.size() > 2 && b.size() > 2) {
    vector<pair<long long, pair<int, int>>> bPairs;
    for (int i = 1; i <= m; ++i) {
      for (int j = i + 1; j <= m; ++j) {
        bPairs.push_back({b[i].value + b[j].value, {b[i].idx, b[j].idx}});
      }
    }
    auto comparePare = [](const pair<long long, pair<int, int>>& x,
                          const pair<long long, pair<int, int>>& y) {
      return x.first < y.first;
    };
    sort(bPairs.begin(), bPairs.end(), comparePare);
    for (int i = 1; i <= n; ++i) {
      long long diff;
      for (int j = i + 1; j <= n; ++j) {
        long long search = 2 * (a[i].value + a[j].value) - sum;
        auto bigger = lower_bound(
            bPairs.begin(), bPairs.end(),
            pair<long long, pair<int, int>>{search, {0, 0}}, comparePare);
        if (bigger == bPairs.end()) --bigger;
        diff = abs(sum + bigger->first - 2 * a[i].value - 2 * a[j].value);
        if (diff < opt) {
          opt = diff;
          fromA = {i, j};
          fromB = bigger->second;
          swapNum = 2;
        }
        auto smaller = upper_bound(
            bPairs.begin(), bPairs.end(),
            pair<long long, pair<int, int>>{search, {0, 0}}, comparePare);
        if (smaller == bPairs.end()) smaller = bPairs.begin();
        diff = abs(sum + smaller->first - 2 * a[i].value - 2 * a[j].value);
        if (diff < opt) {
          opt = diff;
          fromA = {i, j};
          fromB = smaller->second;
          swapNum = 2;
        }
      }
    }
  }
  cout << opt << endl;
  if (swapNum == 0) {
    cout << 0;
  } else if (swapNum == 1) {
    cout << 1 << endl;
    cout << oneSwap.first << " " << oneSwap.second;
  } else {
    cout << 2 << endl;
    cout << fromA.first << " " << fromB.first << endl;
    cout << fromA.second << " " << fromB.second;
  }
  return 0;
}
