#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > max_groups;
vector<int> temp_group;
int minDiff(int arr[]) {
  int min_diff = INT_MAX, temp_diff;
  int cal[3];
  for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= (7 - i - 1); j++) {
      int k = 7 - (i + j);
      cal[0] = arr[0] / i, cal[1] = arr[1] / j, cal[2] = arr[2] / k;
      temp_diff = *max_element(cal, cal + 3) - *min_element(cal, cal + 3);
      if (temp_diff < min_diff) {
        min_diff = temp_diff;
        max_groups.clear();
        temp_group.push_back(i), temp_group.push_back(j),
            temp_group.push_back(k);
        max_groups.push_back(temp_group);
        temp_group.clear();
      } else if (temp_diff == min_diff) {
        temp_group.push_back(i), temp_group.push_back(j),
            temp_group.push_back(k);
        max_groups.push_back(temp_group);
        temp_group.clear();
      }
    }
  }
  return min_diff;
}
string names[] = {"Anka",   "Chapay", "Cleo",        "Troll",
                  "Dracul", "Snowy",  "Hexadecimal", ""};
vector<string> v;
map<string, vector<string> > m;
vector<pair<int, vector<string> > > all1;
vector<pair<int, vector<string> > > all2;
vector<pair<int, vector<string> > > all3;
void combinations(int index, int n, int size,
                  vector<pair<int, vector<string> > > &all) {
  if (n > size || index > 7) return;
  if (n == size) {
    int like = 0;
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < n; j++) {
        if (find(m[v[i]].begin(), m[v[i]].end(), v[j]) != m[v[i]].end()) like++;
      }
    }
    all.push_back({like, v});
    return;
  }
  v.push_back(names[index]);
  combinations(index + 1, n + 1, size, all);
  v.pop_back();
  combinations(index + 1, n, size, all);
}
int main() {
  int n, arr[3];
  string s1, likes, s2;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> s1 >> likes >> s2;
    m[s1].push_back(s2);
  }
  cin >> arr[0] >> arr[1] >> arr[2];
  sort(arr, arr + 3);
  cout << minDiff(arr) << " ";
  int max_max_like = 0;
  for (unsigned int x = 0; x < max_groups.size(); x++) {
    sort(max_groups[x].begin(), max_groups[x].end());
    combinations(0, 0, max_groups[x].at(0), all1);
    v.clear();
    combinations(0, 0, max_groups[x].at(1), all2);
    v.clear();
    combinations(0, 0, max_groups[x].at(2), all3);
    v.clear();
    set<string> s;
    int max_like = 0, temp_like;
    for (unsigned int i = 0; i < all1.size(); i++) {
      for (unsigned int j = 0; j < all2.size(); j++) {
        for (unsigned int k = 0; k < all3.size(); k++) {
          temp_like = all1[i].first + all2[j].first + all3[k].first;
          for (unsigned int a = 0; a < all1[i].second.size(); a++)
            s.insert(all1[i].second[a]);
          for (unsigned int b = 0; b < all2[j].second.size(); b++)
            s.insert(all2[j].second[b]);
          for (unsigned int c = 0; c < all3[k].second.size(); c++)
            s.insert(all3[k].second[c]);
          if (s.size() == 7) max_like = max(max_like, temp_like);
          s.clear();
        }
      }
    }
    max_max_like = max(max_max_like, max_like);
  }
  cout << max_max_like;
}
