#include <bits/stdc++.h>
using namespace std;
const int MAXn = 1e5 + 10;
pair<int, pair<int, int> > ar2[MAXn], ar[MAXn];
int n, m;
long long dp[MAXn][4];
int par[MAXn][4], par2[MAXn][4];
vector<pair<int, int> > ansv;
void getpar(int i, int j) {
  if (par2[i][j]) {
    ansv.push_back(pair<int, int>(ar2[i].first, par2[i][j]));
  }
  if (i) getpar(i - 1, par[i][j]);
}
bool cmp(pair<int, pair<int, int> > p1, pair<int, pair<int, int> > p2) {
  return p1.second < p2.second;
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> ar[i].second.second >> ar[i].second.first;
    ar[i].first = i + 1;
  }
  cin >> m;
  for (int i = 0; i < m; i++) {
    cin >> ar2[i].second.second >> ar2[i].second.first;
    ar2[i].first = i + 1;
  }
  sort(ar, ar + n, cmp);
  sort(ar2, ar2 + m, cmp);
  for (int i = 0; i < m; i++) {
    if (i != 0 && ar2[i - 1].second.first == ar2[i].second.first) {
      dp[i][0] = dp[i - 1][0];
      par[i][0] = 0;
      int hp = lower_bound(ar, ar + n,
                           pair<int, pair<int, int> >(
                               -1, pair<int, int>(ar2[i].second.first, -1)),
                           cmp) -
               ar;
      if (ar[hp].second.first == ar2[i].second.first &&
          ar[hp].second.second <= ar2[i].second.second) {
        dp[i][1] = dp[i - 1][0] + ar[hp].second.second;
        dp[i][3] = dp[i - 1][2] + ar[hp].second.second;
        par[i][1] = 0;
        par2[i][1] = ar[hp].first;
        par[i][3] = 2;
        par2[i][3] = ar[hp].first;
      }
      hp = lower_bound(ar, ar + n,
                       pair<int, pair<int, int> >(
                           -1, pair<int, int>(ar2[i].second.first + 1, -1)),
                       cmp) -
           ar;
      if (ar[hp].second.first == ar2[i].second.first + 1 &&
          ar[hp].second.second <= ar2[i].second.second) {
        if (max(dp[i - 1][1], dp[i - 1][0]) + ar[hp].second.second > dp[i][2]) {
          dp[i][2] = dp[i - 1][0] + ar[hp].second.second;
          par[i][2] = 0;
          par2[i][2] = ar[hp].first;
          if (dp[i][3] < dp[i - 1][1] + ar[hp].second.second) {
            dp[i][3] = dp[i - 1][1] + ar[hp].second.second;
            par[i][3] = 1;
            par2[i][3] = ar[hp].first;
          }
        }
      }
      for (int j = 0; j < 4; j++) {
        if (dp[i][j] < dp[i - 1][j]) {
          par[i][j] = j;
          par2[i][j] = 0;
          dp[i][j] = dp[i - 1][j];
        }
      }
    } else if (i != 0 && ar2[i - 1].second.first == ar2[i].second.first - 1) {
      long long tmp = -1, tmpar = 0;
      if (i)
        for (int j = 0; j < 2; j++) {
          if (tmp < dp[i - 1][j]) {
            tmpar = j;
            tmp = dp[i - 1][j];
          }
        }
      dp[i][0] = tmp;
      par[i][0] = tmpar;
      int hp = lower_bound(ar, ar + n,
                           pair<int, pair<int, int> >(
                               -1, pair<int, int>(ar2[i].second.first, -1)),
                           cmp) -
               ar;
      if (dp[i - 1][2] > dp[i][1]) {
        par[i][1] = 2;
        par2[i][1] = 0;
        dp[i][1] = dp[i - 1][2];
      }
      if (dp[i - 1][3] > dp[i][1]) {
        par[i][1] = 3;
        par2[i][1] = 0;
        dp[i][1] = dp[i - 1][3];
      }
      if (ar[hp].second.first == ar2[i].second.first &&
          ar[hp].second.second <= ar2[i].second.second) {
        dp[i][1] = tmp + ar[hp].second.second;
        par[i][1] = tmpar;
        par2[i][1] = ar[hp].first;
        if (dp[i - 1][2] > dp[i][1]) {
          par[i][1] = 2;
          par2[i][1] = 0;
          dp[i][1] = dp[i - 1][2];
        }
        if (dp[i - 1][3] > dp[i][1]) {
          par[i][1] = 3;
          par2[i][1] = 0;
          dp[i][1] = dp[i - 1][3];
        }
      }
      hp = lower_bound(ar, ar + n,
                       pair<int, pair<int, int> >(
                           -1, pair<int, int>(ar2[i].second.first + 1, -1)),
                       cmp) -
           ar;
      if (ar[hp].second.first == ar2[i].second.first + 1 &&
          ar[hp].second.second <= ar2[i].second.second) {
        dp[i][2] = tmp + ar[hp].second.second;
        par[i][2] = tmpar;
        par2[i][2] = ar[hp].first;
        if (tmp < dp[i - 1][2]) {
          tmp = dp[i - 1][2];
          tmpar = 2;
        }
        if (tmp < dp[i - 1][3]) {
          tmp = dp[i - 1][3];
          tmpar = 3;
        }
        if (tmpar > 1) {
          dp[i][3] = tmp + ar[hp].second.second;
          par2[i][3] = ar[hp].first;
          par[i][3] = tmpar;
        }
      }
    } else {
      long long tmp = -1, tmpar = 0;
      if (i) {
        for (int j = 0; j < 4; j++) {
          if (tmp < dp[i - 1][j]) {
            tmpar = j;
            tmp = dp[i - 1][j];
          }
        }
      } else
        tmp = 0;
      dp[i][0] = tmp;
      par[i][0] = tmpar;
      int hp = lower_bound(ar, ar + n,
                           pair<int, pair<int, int> >(
                               -1, pair<int, int>(ar2[i].second.first, -1)),
                           cmp) -
               ar;
      if (ar[hp].second.first == ar2[i].second.first &&
          ar[hp].second.second <= ar2[i].second.second) {
        dp[i][1] = tmp + ar[hp].second.second;
        par[i][1] = tmpar;
        par2[i][1] = ar[hp].first;
      }
      hp = lower_bound(ar, ar + n,
                       pair<int, pair<int, int> >(
                           -1, pair<int, int>(ar2[i].second.first + 1, -1)),
                       cmp) -
           ar;
      if (ar[hp].second.first == ar2[i].second.first + 1 &&
          ar[hp].second.second <= ar2[i].second.second) {
        dp[i][2] = tmp + ar[hp].second.second;
        par[i][2] = tmpar;
        par2[i][2] = ar[hp].first;
      }
    }
  }
  long long ans = 0;
  int ind = m - 1;
  for (int i = 0; i < 4; i++) {
    ans = max(ans, dp[ind][i]);
  }
  for (int i = 0; i < 4; i++)
    if (ans == dp[ind][i]) {
      getpar(m - 1, i);
      break;
    }
  cout << ans << endl << ansv.size() << endl;
  for (int i = 0; i < ansv.size(); i++)
    cout << ansv[i].first << ' ' << ansv[i].second << '\n';
}
