#include <bits/stdc++.h>
using namespace std;
struct in {
  int s, c, num;
} shoes[1000000];
long long sum = 0, k = 0;
struct xx {
  int d, l, num;
} people[1000000];
struct yy {
  int a, b;
} final[1000000];
int cmp(in a, in b) { return a.s < b.s; }
int cmp1(xx a, xx b) { return a.l < b.l; }
int one[1000000], two[1000000][2];
bool test1(int l, int r) {
  for (int i = l; i <= r; i++) {
    if (one[i]) {
      for (int j = l; j < i; j++) {
        final[k].a = two[j + 1][0];
        final[k++].b = shoes[j].num;
        sum += shoes[j].c;
      }
      final[k].a = one[i];
      final[k++].b = shoes[i].num;
      sum += shoes[i].c;
      for (int j = i + 1; j <= r; j++) {
        final[k].a = two[j][0];
        final[k++].b = shoes[j].num;
        sum += shoes[j].c;
      }
      return true;
    }
  }
  return false;
}
bool test2(int l, int r) {
  for (int i = l + 1; i <= r; i++) {
    if (two[i][0] && two[i][1]) {
      for (int j = l; j < i - 1; j++) {
        final[k].a = two[j + 1][0];
        final[k++].b = shoes[j].num;
        sum += shoes[j].c;
      }
      final[k].a = two[i][0];
      final[k++].b = shoes[i - 1].num;
      sum += shoes[i - 1].c;
      final[k].a = two[i][1];
      final[k++].b = shoes[i].num;
      sum += shoes[i].c;
      for (int j = i + 1; j <= r; j++) {
        final[k].a = two[j][0];
        final[k++].b = shoes[j].num;
        sum += shoes[j].c;
      }
      return true;
    }
  }
  return false;
}
int main() {
  int n, m;
  while (cin >> n) {
    for (int i = 0; i < n; i++) {
      scanf("%d%d", &shoes[i].c, &shoes[i].s);
      shoes[i].num = i + 1;
    }
    scanf("%d", &m);
    for (int i = 0; i < m; i++) {
      scanf("%d%d", &people[i].d, &people[i].l);
      people[i].num = i + 1;
    }
    sort(shoes, shoes + n, cmp);
    sort(people, people + m, cmp1);
    memset(one, 0, sizeof(one));
    memset(two, 0, sizeof(two));
    sum = 0, k = 0;
    int i, j;
    for (i = 0, j = 0; i < n && j < m;) {
      if (shoes[i].s < people[j].l) {
        i++;
      } else if (shoes[i].s == people[j].l && i + 1 < n &&
                 shoes[i + 1].s == people[j].l + 1) {
        if (shoes[i].c <= people[j].d && shoes[i + 1].c <= people[j].d) {
          if (two[i + 1][0] == 0) {
            two[i + 1][0] = people[j].num;
          } else {
            two[i + 1][1] = people[j].num;
          }
        } else if (shoes[i].c <= people[j].d) {
          one[i] = people[j].num;
        } else if (shoes[i + 1].c <= people[j].d) {
          one[i + 1] = people[j].num;
        }
        j++;
      } else if (shoes[i].s == people[j].l || shoes[i].s == people[j].l + 1) {
        if (people[j].d >= shoes[i].c) {
          one[i] = people[j].num;
        }
        j++;
      } else
        j++;
    }
    i = 0;
    while (i < n) {
      int l, r;
      l = i;
      for (r = i + 1; r < n && two[r][0]; r++)
        ;
      r--;
      i = r + 1;
      if (l == r) {
        if (one[l]) {
          final[k].a = one[l];
          final[k++].b = shoes[l].num;
          sum += shoes[l].c;
        }
      } else {
        if (!test1(l, r)) {
          if (!test2(l, r)) {
            int minx = 1000000000 + 1, id;
            for (int j = l; j <= r; j++) {
              if (minx > shoes[j].c) {
                minx = shoes[j].c;
                id = j;
              }
            }
            for (int j = l; j < id; j++) {
              final[k].a = two[j + 1][0];
              final[k++].b = shoes[j].num;
              sum += shoes[j].c;
            }
            for (int j = id + 1; j <= r; j++) {
              final[k].a = two[j][0];
              final[k++].b = shoes[j].num;
              sum += shoes[j].c;
            }
          }
        }
      }
    }
    cout << sum << endl;
    cout << k << endl;
    for (int i = 0; i < k; i++) {
      printf("%d %d\n", final[i].a, final[i].b);
    }
  }
  return 0;
}
