#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
inline ll read(){
char _c=getchar();ll _x=0, _f=1;
for(;!isdigit(_c);_c=getchar()) if(_c=='-') _f=-1;
for(;isdigit(_c);_c=getchar()) _x=_x*10+_c-'0';
return _x*_f;
}
ll all_len=1, len, ans, s_ans;
ll tire[N][30], fail[N];
char c;
char son[N], s[N];
void set_tire(char c[], ll len){
ll x=1;
for(int i=1;i<=len;i++){
if( !tire[x][ c[i]-'a' ] ) tire[x][ c[i]-'a' ]= ++all_len;
x=tire[x][ c[i]-'a' ];
}
fail[x]=len;
}
void do_find(){
ll x=1;
for(int i=1;i<=len;i++){
if( tire[x][ s[i]-'a' ] ) ;
else{
if( !tire[1][s[i]-'a'] ){
ans+=s_ans;
break;
}
else{
ans+=s_ans;
x=1;
}
}
x=tire[x][ s[i]-'a' ];
if( fail[x] ) s_ans=fail[x];
else s_ans=0;
}
}
int main(){
while( scanf("%c",&c)==1 ){
if(c>='A' && c<='Z') son[ ++len ]=c;
else{
if(c=='\n') continue ;
set_tire(son, len);
len=0;
if(c=='.') break;
}
}
len=0;
while( scanf("%c",&c)==1 ) if(c!='\n') s[ ++len ]=c;
do_find();
printf("%lld\n%lld", ans, all_len);
return 0;
}