#include <bits/stdc++.h>
using namespace std;
const long long int N = 1e6 + 9;
const long long int mod = 1e9 + 7;
long long int powerk(long long int x, long long int y);
vector<pair<pair<long long int, long long int>, long long int>> v;
vector<pair<long long int, long long int>> ans;
set<pair<long long int, long long int>> st;
long long int a[N];
bool cmp(pair<pair<long long int, long long int>, long long int> a,
         pair<pair<long long int, long long int>, long long int> b) {
  if (a.first.first > b.first.first)
    return 1;
  else
    return 0;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    long long int l, r;
    cin >> l >> r;
    v.push_back({{r, l}, i});
  }
  long long int k;
  cin >> k;
  for (int i = 1; i <= k; ++i) {
    long long int l;
    cin >> l;
    st.insert({l, i});
  }
  long long int cnt = 0, sum = 0;
  sort(v.begin(), v.end(), cmp);
  for (auto it : v) {
    auto itt = st.lower_bound({it.first.second, 0});
    if (itt != st.end()) {
      cnt++;
      sum += it.first.first;
      auto iit = *itt;
      ans.push_back({it.second, iit.second});
      st.erase(iit);
    }
  }
  sort(ans.begin(), ans.end());
  cout << cnt << " " << sum << '\n';
  for (auto it : ans) {
    cout << it.first << " " << it.second << '\n';
  }
}
long long int powerk(long long int x, long long int y) {
  if (y == 0) return 1;
  if (y == 1) return x % mod;
  if (y & 1)
    return ((powerk((x * x) % mod, y / 2) % mod) * x) % mod;
  else
    return powerk((x * x) % mod, y / 2) % mod;
}
