/*
TASK:folders
LANG:C
*/
#include <stdio.h>
#include <string.h>

short m[2][201][201]={0}, v1, v;
char a[2][201][15];
int k[2][201]={0}, br=0, otg=0;

void dfs(int r, int l,int z)
{
	int i, j;
	char p[15];
	short x, y;

	br++;

	for (i=0;i<l;i++)
	    {
	     scanf ("%s ",&p);
		scanf ("%d%d",&x,&y);
	     strcpy (a[z][br],p);
	     m[z][r][br]=1;
	     k[z][br]=y;
	     if (x) dfs( br, x, z);
	    }
}

int dfs1(int i, int j)
{
	short x, y;
        int re=0, fl;
        
	if (k[0][i]>k[1][j]) {br=0;return broqch(i);}

	for (x=i+1;x<v;x++)
	{
		fl=1;
		if (m[0][i][x])
		for (y=j+1;y<v1;y++)
		{
		    if (m[1][j][y]&&!strcmp(a[0][x],a[1][y]))
			{
				re=re+dfs1(x,y);
				fl=0;
				break;
			}
		}
		if (!m[0][i][x]) fl=0;
		if (fl) {br=0;re=re+broqch(x);}

        }
	return re;
}

int broqch(int i)
{
	int j;
	int br1=0, fl=1;

		for (j=1;j<v;j++) if (m[0][i][j]) {br1=br1+broqch(j);fl=0;}

	if (fl) br1++;

	return br1;
}

int main()
{
	char p[15];
	int i, j;
	short x, y;
     	   scanf ("%s ",&p);
		scanf ("%d%d",&x,&y);
     	   k[0][0]=y;
	        strcpy (a[0][0],p);
	br=0;

	dfs( 0, x, 0);

	v=br+1;

	scanf ("%s%d%d",&p,&x,&y);

	k[1][0]=y;
	strcpy (a[1][0],p);
	br=0;

	dfs( 0, x, 1);

	v1=br+1;
	br=0;
	otg=dfs1(0, 0);

        printf ("%d\n",otg);

        return 0;
}
