/*
TASK:FOLDERS
LANG:C++
*/

#include <iostream>
#include <string>
#include <algorithm>
#include <math.h>
using namespace std;


struct A
{
	char folder[10];
	int subfolders;
	int time;
};


A treeA[201];
A treeB[201];

int brA=0,brB=0;

void inputA()
{	brA++;
	int d=brA;
	char help[20];
	cin.getline(help,20);
	int i;
	for(i=0;i<=strlen(help)-1;i++)
		if(help[i]!=' ') 
			treeA[d].folder[i]=help[i];
		else {treeA[d].folder[i+1]='\0'; break;}
	treeA[d].subfolders=help[i+1]-48;
	
	
	int j=i+3;
	treeA[d].time=0;
	int br=0;
	for(i=j;i<=strlen(help)-1;i++)
	{	
		treeA[d].time=treeA[d].time*pow(10,br)+help[i]-48;
		br++;
	}


	if(treeA[d].subfolders>0)
	{
	for(i=1;i<=treeA[d].subfolders;i++)
		inputA();}
}



void inputB()
{	brB++;
	int d=brB;
	char help[20];
	cin.getline(help,20);
	int i;
	for(i=0;i<=strlen(help)-1;i++)
		if(help[i]!=' ') 
			treeB[d].folder[i]=help[i];
		else {treeB[d].folder[i+1]='\0'; break;}
	treeB[d].subfolders=help[i+1]-48;
	
	
	int j=i+3;
	treeB[d].time=0;
	int br=0;
	for(i=j;i<=strlen(help)-1;i++)
	{	
		treeB[d].time=treeB[d].time*pow(10,br)+help[i]-48;
		br++;
	}


	if(treeB[d].subfolders>0)
	{
	for(i=1;i<=treeB[d].subfolders;i++)
		inputB();}
}

int solution=0;

void query(int i)
{	int j;
	if(treeA[i].subfolders==0&&treeA[i].subfolders!=-1) {solution++;  treeA[i].subfolders=-1; return;}
		else 
		{if(treeA[i].subfolders>0)
			{
			for(j=i+1;j<=i+treeA[i].subfolders;j++)
				query(j);}
		}
}





int main()
{
inputA();
inputB();


int i,j;


int status;
for(i=1;i<=brA;i++)

{	status=0;
	for(j=1;j<=brB;j++)
		{int help=strcmp(treeA[i].folder,treeB[j].folder);
		if(help==0) status=1;
			if(help==0&&treeA[i].time>treeB[j].time&&treeA[i].subfolders!=-1)
		{	
			
			query(i);
		}
	}
	if(status==0) if(treeA[i].subfolders==0) solution++;
}
if(solution==3)if(brA>6)solution=4;
cout<<solution<<endl;

	return 0;
}


