#include <bits/stdc++.h>
using namespace std;
struct item {
  int c, p, id;
};
bool acompare(item lhs, item rhs) {
  if (lhs.p == rhs.p) return lhs.c < rhs.c;
  return lhs.p > rhs.p;
}
int main() {
  int n, k;
  cin >> n;
  item t[n];
  for (int i = 0; i < n; i++) {
    cin >> t[i].c >> t[i].p;
    t[i].id = i + 1;
  }
  sort(t, t + n, acompare);
  cin >> k;
  vector<int> a(k);
  map<int, vector<int>> mp;
  for (int i = 0; i < k; i++) {
    cin >> a[i];
    mp[a[i]].push_back(i + 1);
  }
  sort(a.begin(), a.end());
  vector<pair<int, int>> ans;
  long long res = 0;
  for (int i = 0; i < n; i++) {
    if (!a.size()) break;
    int p = lower_bound(a.begin(), a.end(), t[i].c) - a.begin();
    if (p != a.size()) {
      res += t[i].p;
      ans.push_back({t[i].id, mp[a[p]][0]});
      mp[a[p]].erase(mp[a[p]].begin());
      a.erase(a.begin() + p);
    }
  }
  cout << ans.size() << ' ' << res << '\n';
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i].first << ' ' << ans[i].second << '\n';
  }
  return 0;
}
