#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
const int MAXN = 100010;
int n, m;
pair<pair<int, int>, int> a[MAXN], b[MAXN];
long long f[MAXN][4];
pair<int, int> g[MAXN][4];
int ansN;
pair<int, int> ans[MAXN];
int main() {
  cin >> n;
  for (int i = 0; i < n; i++)
    cin >> a[i].first.second >> a[i].first.first, a[i].second = i + 1;
  sort(a, a + n);
  cin >> m;
  for (int i = 0; i < m; i++)
    cin >> b[i].first.second >> b[i].first.first, b[i].second = i + 1;
  sort(b, b + m);
  memset(f, -1, sizeof(f));
  for (int j = 0; j < 4; j++) {
    f[0][j] = 0, g[0][j] = make_pair(-1, -1);
    for (int v = 0; v < 2; v++)
      if ((j >> v) & 1) {
        int p =
            (lower_bound(a, a + n,
                         make_pair(make_pair(b[0].first.first + v, INF), INF)) -
             a) -
            1;
        if ((p >= 0) && (a[p].first.first == b[0].first.first + v) &&
            (b[0].first.second >= a[p].first.second))
          if (a[p].first.second > f[0][j])
            f[0][j] = a[p].first.second, g[0][j] = make_pair(-1, p);
      }
  }
  for (int i = 1; i < m; i++) {
    int d = min(2, b[i].first.first - b[i - 1].first.first);
    for (int j = 0; j < 4; j++) {
      for (int k = 0; k < 4; k++)
        if ((j & (k >> d)) == (k >> d)) {
          if (f[i - 1][k] > f[i][j])
            f[i][j] = f[i - 1][k], g[i][j] = make_pair(k, -1);
          for (int v = 0; v < 2; v++)
            if (((j - (k >> d)) >> v) & 1) {
              int p =
                  (lower_bound(
                       a, a + n,
                       make_pair(make_pair(b[i].first.first + v, INF), INF)) -
                   a) -
                  1;
              if ((p >= 0) && (a[p].first.first == b[i].first.first + v) &&
                  (b[i].first.second >= a[p].first.second))
                if (f[i - 1][k] + a[p].first.second > f[i][j])
                  f[i][j] = f[i - 1][k] + a[p].first.second,
                  g[i][j] = make_pair(k, p);
            }
        }
    }
  }
  int i = m - 1, j = 0;
  for (int k = 0; k < 4; k++)
    if (f[i][k] > f[i][j]) j = k;
  cout << f[i][j] << endl;
  while (i >= 0) {
    if (g[i][j].second != -1)
      ans[ansN++] = make_pair(b[i].second, a[g[i][j].second].second);
    j = g[i][j].first;
    i--;
  }
  cout << ansN << endl;
  for (int i = 0; i < ansN; i++)
    cout << ans[i].first << ' ' << ans[i].second << endl;
  return 0;
}
