#include <bits/stdc++.h>
using namespace std;
int min(int a, int b) {
  if (a < b) return a;
  return b;
}
int max(int a, int b) {
  if (a > b) return a;
  return b;
}
int convert(string a) {
  int q;
  if (a.length() == 4) {
    if (a[0] == 'A')
      q = 1;
    else
      q = 3;
  } else if (a.length() == 5) {
    if (a[0] == 'T')
      q = 4;
    else
      q = 6;
  } else if (a.length() == 6) {
    if (a[0] == 'C')
      q = 2;
    else
      q = 5;
  } else
    q = 7;
  return q;
}
int main() {
  int n, a, b, c, p[8][8] = {{0}}, i, j, a1, a2, a3, a4, a5, a6, a7, x, y, z,
                  mind = 1000000000, maxf = 0, mini, f;
  set<int> teams[3];
  set<int>::iterator it, it2;
  string temp;
  scanf(" %d", &n);
  while (n-- > 0) {
    cin >> temp;
    i = convert(temp);
    cin >> temp;
    cin >> temp;
    j = convert(temp);
    p[i][j] = 1;
  }
  scanf(" %d %d %d", &a, &b, &c);
  for (a1 = 0; a1 < 3; a1++) {
    teams[a1].insert(1);
    for (a2 = 0; a2 < 3; a2++) {
      teams[a2].insert(2);
      for (a3 = 0; a3 < 3; a3++) {
        teams[a3].insert(3);
        for (a4 = 0; a4 < 3; a4++) {
          teams[a4].insert(4);
          for (a5 = 0; a5 < 3; a5++) {
            teams[a5].insert(5);
            for (a6 = 0; a6 < 3; a6++) {
              teams[a6].insert(6);
              for (a7 = 0; a7 < 3; a7++) {
                teams[a7].insert(7);
                if (teams[0].size() != 0 && teams[1].size() != 0 &&
                    teams[2].size() != 0) {
                  mini = (max(a / teams[0].size(),
                              max(b / teams[1].size(), c / teams[2].size())) -
                          min(a / teams[0].size(),
                              min(b / teams[1].size(), c / teams[2].size())));
                  f = 0;
                  if (mini <= mind) {
                    if (mini < mind) maxf = 0;
                    mind = mini;
                    for (i = 0; i < 3; i++) {
                      for (it = teams[i].begin(); it != teams[i].end(); it++) {
                        for (it2 = teams[i].begin(); it2 != teams[i].end();
                             it2++) {
                          f += p[*it][*it2];
                        }
                      }
                    }
                    if (f >= maxf) maxf = f;
                  }
                }
                teams[a7].erase(7);
              }
              teams[a6].erase(6);
            }
            teams[a5].erase(5);
          }
          teams[a4].erase(4);
        }
        teams[a3].erase(3);
      }
      teams[a2].erase(2);
    }
    teams[a1].erase(1);
  }
  printf("%d %d", mind, maxf);
}
