#include <bits/stdc++.h>
using namespace std;
const int INF = 0x7fffffff;
const int MAXN = 2000 + 3;
long long n, m, a[MAXN], b[MAXN];
vector<pair<long long, pair<int, int> > > v;
long long sa, sb, ans, ta, tb;
stringstream ss, tss;
bool cmp(pair<long long, pair<int, int> > a,
         pair<long long, pair<int, int> > b) {
  return a.first < b.first;
}
long long absi(long long x) {
  if (x < 0) return -x;
  return x;
}
void init() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 0; i < (int)(n); i++) {
    cin >> a[i];
    sa += a[i];
  }
  cin >> m;
  for (int i = 0; i < (int)(m); i++) {
    cin >> b[i];
    sb += b[i];
  }
  ans = absi(sa - sb);
  ss << 0;
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(m); j++) {
      v.push_back({(long long)(b[j] - a[i]) * 2, {i, j}});
    }
  }
  sort(v.begin(), v.end(), cmp);
}
void calc(long long x, int ig1, int ig2) {
  long long st =
      lower_bound(v.begin(), v.end(),
                  (pair<long long, pair<int, int> >){-ans - x, {0, 0}}, cmp) -
      v.begin();
  long long ed =
      upper_bound(v.begin(), v.end(),
                  (pair<long long, pair<int, int> >){ans - x, {0, 0}}, cmp) -
      v.begin();
  for (long long i = st; i < ed; i++) {
    if (v[i].second.first == ig1 || v[i].second.second == ig2) continue;
    if (absi(v[i].first + x) < ans) {
      ans = absi(v[i].first + x);
      ss.clear();
      ss.str("");
      ss << tss.str();
      ss << v[i].second.first + 1 << " " << v[i].second.second + 1;
    }
  }
}
int main() {
  init();
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(m); j++) {
      ta = sa - a[i] + b[j];
      tb = sb + a[i] - b[j];
      if (absi(ta - tb) < ans) {
        ans = absi(ta - tb);
        ss.clear();
        ss.str("");
        ss << 1 << endl << i + 1 << " " << j + 1;
      }
      tss.clear();
      tss.str("");
      tss << 2 << endl << i + 1 << " " << j + 1 << endl;
      calc(ta - tb, i, j);
    }
  }
  cout << ans << endl;
  cout << ss.str();
  return 0;
}
