#include <bits/stdc++.h>
using namespace std;
struct data {
  int idx, val, size;
};
data ng[1111], ban[1111];
bool d[1111];
vector<data> ans;
int sum;
int nban, nng;
void input() {
  int i;
  for (i = 0; i < nng; i++) {
    scanf("%d %d", &ng[i].size, &ng[i].val);
    ng[i].idx = i + 1;
  }
  scanf("%d", &nban);
  for (i = 0; i < nban; i++) {
    scanf("%d", &ban[i].size);
    ban[i].idx = i + 1;
  }
}
bool ssban(data d1, data d2) {
  if (d1.size != d2.size) return d1.size < d2.size;
  return d1.idx < d2.idx;
}
bool ssng(data d1, data d2) {
  if (d1.val != d2.val) return d1.val > d2.val;
  if (d1.size != d2.size) return d1.size < d2.size;
  return d1.idx < d2.idx;
}
void solve() {
  int i, j;
  data temp;
  sort(ban, ban + nban, ssban);
  sort(ng, ng + nng, ssng);
  sum = 0;
  for (i = 0; i < nng; i++) {
    for (j = 0; j < nban; j++) {
      if (d[j] == 1) continue;
      if (ng[i].size <= ban[j].size) {
        d[j] = 1;
        sum += ng[i].val;
        temp.idx = ng[i].idx;
        temp.val = ban[j].idx;
        ans.push_back(temp);
        break;
      }
    }
  }
  printf("%d %d\n", ans.size(), sum);
  for (i = 0; i < ans.size(); i++) printf("%d %d\n", ans[i].idx, ans[i].val);
}
int main() {
  while (scanf("%d", &nng) > 0) {
    input();
    solve();
  }
  return 0;
}
