#include <bits/stdc++.h>
using namespace std;
struct node {
  char s[100];
  int p, id;
} a[100010], b[100010];
bool cmp(node a, node b) {
  return a.p < b.p || (a.p == b.p && strcmp(a.s, b.s) > 0);
}
bool cmp1(node a, node b) {
  return a.p > b.p || (a.p == b.p && strcmp(a.s, b.s) < 0);
}
bool cmp2(node a, node b) {
  return a.p > b.p || (a.p == b.p && strcmp(a.s, b.s) < 0);
}
int c[100010];
int main() {
  int i, j, n, m, k;
  char t[100010];
  while (~scanf("%d", &n)) {
    for (i = 0; i < n; i++) {
      scanf("%s%d", a[i].s, &a[i].p);
      a[i].id = i;
      b[i] = a[i];
    }
    scanf("%d", &m);
    for (i = 0; i < m; i++) scanf("%d", &c[i]);
    sort(c, c + m);
    scanf("%s", t);
    int id = -1;
    for (i = 0; i < n; i++)
      if (strcmp(t, a[i].s) == 0) {
        id = i;
        break;
      }
    a[id].p += c[m - 1];
    sort(a, a + n, cmp);
    j = m - 2;
    for (i = 0; i < n && j >= 0; i++) {
      k = a[i].id;
      if (k == id) continue;
      a[i].p += c[j--];
    }
    sort(a, a + n, cmp1);
    for (i = 0; i < n; i++)
      if (a[i].id == id) break;
    printf("%d ", i + 1);
    for (i = 0; i < n; i++) a[i] = b[i];
    sort(a, a + n, cmp2);
    for (i = 0; i < n; i++)
      if (a[i].id == id) break;
    int r = i;
    if (m == n) {
      a[r].p += c[0];
      j = 1;
    } else
      j = 0;
    for (i = 0; i < n && j < m; i++) {
      k = a[i].id;
      if (k == id) continue;
      if (a[i].p > a[r].p || (a[i].p == a[r].p && strcmp(a[i].s, a[r].s) < 0)) {
        continue;
      }
      while (j < m && (a[i].p + c[j] < a[r].p ||
                       (a[i].p + c[j] == a[r].p && strcmp(a[i].s, a[r].s) > 0)))
        j++;
      if (j < m) a[i].p += c[j], j++;
    }
    sort(a, a + n, cmp1);
    for (i = 0; i < n; i++)
      if (a[i].id == id) break;
    printf("%d\n", i + 1);
  }
  return 0;
}
