#include <bits/stdc++.h>
using namespace std;
struct Fi {
  long long k;
  int pri;
} fi[110];
long long arr[110];
bool cmp(Fi a, Fi b) {
  if (a.pri < b.pri)
    return true;
  else
    return false;
}
int main() {
  int n, t;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%I64d%d", &fi[i].k, &fi[i].pri);
  }
  sort(fi, fi + n, cmp);
  int tt;
  scanf("%d", &tt);
  long long maxn = 0;
  for (int i = 0; i < tt; i++) {
    scanf("%I64d", arr + i);
    maxn = arr[i];
  }
  arr[tt] = maxn + 1;
  long long ans = 0;
  long long sum = 0;
  int cnt = 0;
  for (int i = 0; i < n; i++) {
    if (sum + fi[i].k <= arr[cnt]) {
      ans += (fi[i].k) * (fi[i].pri) * (cnt + 1);
      sum += fi[i].k;
      fi[i].k = 0;
    } else {
      ans += (arr[cnt] - sum) * fi[i].pri * (cnt + 1);
      fi[i].k -= (arr[cnt] - sum);
      sum = arr[cnt];
    }
    while (fi[i].k > 0 && cnt < tt) {
      cnt++;
      if (sum + fi[i].k <= arr[cnt]) {
        ans += (fi[i].k) * (fi[i].pri) * (cnt + 1);
        sum += fi[i].k;
        fi[i].k = 0;
      } else {
        ans += (arr[cnt] - sum) * fi[i].pri * (cnt + 1);
        fi[i].k -= (arr[cnt] - sum);
        sum = arr[cnt];
      }
    }
    if (fi[i].k > 0) ans += fi[i].k * fi[i].pri * (cnt + 1);
  }
  printf("%I64d\n", ans);
  return 0;
}
