#include <bits/stdc++.h>
int n;
int a[10][10];
int mem[3][100];
int memcnt;
int mark[10];
int xdfd;
int maxd(int xx, int yy) {
  if (xx > yy)
    return xx;
  else
    return yy;
}
int mind(int xx, int yy) {
  if (xx < yy)
    return xx;
  else
    return yy;
}
void makemin() {
  int x, y, z;
  scanf("%d %d %d", &x, &y, &z);
  int i, j, k;
  int mini = -1, minj = -1, mink = -1;
  int plx = -1;
  for (i = 1; i <= 5; i++) {
    for (j = 1; j <= 6 - i; j++) {
      k = 7 - i - j;
      double maxx = maxd(maxd(x / i, y / j), z / k);
      double minn = mind(mind(x / i, y / j), z / k);
      if (plx > maxx - minn || plx < 0) {
        plx = maxx - minn;
        mem[0][0] = i;
        mem[1][0] = j;
        mem[2][0] = k;
        memcnt = 1;
      } else if (plx == maxx - minn) {
        mem[0][memcnt] = i;
        mem[1][memcnt] = j;
        mem[2][memcnt] = k;
        memcnt++;
      }
    }
  }
  printf("%d ", plx);
}
void process(int asdf, int ta[], int tb[], int tc[]) {
  int cnt1 = 0;
  int cnt2 = 0;
  int cnt3 = 0;
  int i, j;
  for (i = 0; i < mem[0][asdf]; i++)
    for (j = 0; j < mem[0][asdf]; j++) cnt1 += a[ta[i]][ta[j]];
  for (i = 0; i < mem[1][asdf]; i++)
    for (j = 0; j < mem[1][asdf]; j++) cnt2 += a[tb[i]][tb[j]];
  for (i = 0; i < mem[2][asdf]; i++)
    for (j = 0; j < mem[2][asdf]; j++) cnt3 += a[tc[i]][tc[j]];
  if (cnt1 + cnt2 + cnt3 > xdfd) xdfd = cnt1 + cnt2 + cnt3;
}
void makec(int asdf, int len, int ta[], int tb[], int tc[]) {
  if (len == mem[2][asdf]) {
    process(asdf, ta, tb, tc);
  } else {
    int i;
    for (i = 1; i <= 7; i++) {
      if (mark[i] == 0) {
        mark[i] = 1;
        tc[len] = i;
        makec(asdf, len + 1, ta, tb, tc);
        tc[len] = 0;
        mark[i] = 0;
      }
    }
  }
}
void makeb(int asdf, int len, int ta[], int tb[]) {
  if (len == mem[1][asdf]) {
    int tc[10];
    makec(asdf, 0, ta, tb, tc);
  } else {
    int i;
    for (i = 1; i <= 7; i++) {
      if (mark[i] == 0) {
        mark[i] = 1;
        tb[len] = i;
        makeb(asdf, len + 1, ta, tb);
        tb[len] = 0;
        mark[i] = 0;
      }
    }
  }
}
void makea(int asdf, int len, int ta[]) {
  if (len == mem[0][asdf]) {
    int tb[10];
    makeb(asdf, 0, ta, tb);
  } else {
    int i;
    for (i = 1; i <= 7; i++) {
      if (mark[i] == 0) {
        mark[i] = 1;
        ta[len] = i;
        makea(asdf, len + 1, ta);
        ta[len] = 0;
        mark[i] = 0;
      }
    }
  }
}
void maketeam() {
  int ta[10];
  int i;
  for (i = 0; i < memcnt; i++) makea(i, 0, ta);
  printf("%d\n", xdfd);
}
int main() {
  scanf("%d ", &n);
  int i, j;
  char x[2][100];
  int y[2];
  for (i = 0; i < n; i++) {
    scanf("%s likes %s ", x[0], x[1]);
    for (j = 0; j < 2; j++) {
      if (x[j][0] == 'A')
        y[j] = 1;
      else if (x[j][0] == 'T')
        y[j] = 2;
      else if (x[j][0] == 'D')
        y[j] = 3;
      else if (x[j][0] == 'H')
        y[j] = 4;
      else if (x[j][0] == 'S')
        y[j] = 5;
      else if (x[j][1] == 'l')
        y[j] = 6;
      else
        y[j] = 7;
    }
    a[y[0]][y[1]] = 1;
  }
  makemin();
  maketeam();
  return 0;
}
