#include <bits/stdc++.h>
int max(int a, int b) { return a > b ? a : b; }
int min(int a, int b) { return a < b ? a : b; }
char tmp[200001];
int main(void) {
  {
    scanf("%s", tmp);
    int i;
    int cs[52] = {0}, ct[52] = {0};
    for (i = 0; tmp[i]; i++) {
      if (tmp[i] >= 'a' && tmp[i] <= 'z')
        cs[tmp[i] - 'a' + 26]++;
      else
        cs[tmp[i] - 'A']++;
    }
    scanf("%s", tmp);
    for (i = 0; tmp[i]; i++) {
      if (tmp[i] >= 'a' && tmp[i] <= 'z')
        ct[tmp[i] - 'a' + 26]++;
      else
        ct[tmp[i] - 'A']++;
    }
    int y = 0, w = 0, x;
    for (i = 0; i < 26; i++) {
      if (cs[i]) {
        if (ct[i]) {
          x = min(cs[i], ct[i]);
          y += x;
          cs[i] -= x;
          ct[i] -= x;
        }
      }
      if (cs[i + 26]) {
        if (ct[i + 26]) {
          x = min(cs[i + 26], ct[i + 26]);
          y += x;
          cs[i + 26] -= x;
          ct[i + 26] -= x;
        }
      }
    }
    for (i = 0; i < 26; i++) {
      if (cs[i]) {
        if (ct[i + 26]) {
          x = min(cs[i], ct[i + 26]);
          w += x;
          cs[i] -= x;
          ct[i + 26] -= x;
        }
      }
      if (cs[i + 26]) {
        if (ct[i]) {
          x = min(cs[i + 26], ct[i]);
          w += x;
          cs[i + 26] -= x;
          ct[i] -= x;
        }
      }
    }
    printf("%d %d\n", y, w);
  }
  return 0;
}
