/*
TASK: folders
LANG: C++
*/

#include <stdio.h>
#include <string.h>

#define pn p->next[i]
#define qn q->next[j]

const int MAXLEN = 10;
const int MAXFILES = 10;

typedef struct treeStruct { 
   char name[MAXLEN]; 
   int n;                     // broi na papki/failove v teku6tata dir
   int files;                 // broi na failove vyv vsi4ki podpapki
   int time;                  // vreme na syzdavane na papkata/faila 
   treeStruct *next[MAXFILES];// ukazateli kum vsi4ki podpapki/failove
} tree;

typedef tree* link;

tree end;
link A=&end, B=&end;

int lamp;

int input (link &p)
{
   int i;

   p = new tree;

   scanf ("%s%d%d", (p->name), &(p->n), &(p->time));

   if ((p->n) == 0) p->files=1;
   else p->files=0;

   for (i=0; i<(p->n); i++)
      p->files += input (p->next[i]);

   return p->files;
}

int solve (link p, link q)
{
   int i, j;
   int br=0;

   for (i=0; i<p->n; i++) {
       lamp=0;

	   for (j=0; j<q->n; j++) {
		   if ( strcmp (pn->name, qn->name) == 0 ) {
			   if (pn->time <= qn->time) {
			      br += solve (pn, qn);
			      lamp=1;
			      break;
			   }
		   }
	   }

	   if (!lamp) br += pn->files;
   }

   return br;
}

int main ()
{
//   freopen ("folders.in", "r", stdin); //mahni towa!!!

   input (A);
   input (B);

   printf ("%d\n", solve (A, B));

   return 0;
}

