{
TASK:folders
LANG:PASCAL
}
{$R-}
const
 max=20; {200}
type
 flz=record
   name:string;
   date:word;
   kids:byte;
   dir:byte;
  end;
var
 t:text;
 d:array [1..2,1..max] of flz;
 c:array [1..2] of byte;
 u:array [1..max] of boolean;
 s:string;
 fl:boolean;
 i,j,k,l,x,y,ans:integer;
 procedure gett(var s:string; var x:byte; var y:word);
  var
   i:byte;
   c:char;
  begin
    repeat
     read (t,c);
     s:=s+c;
    until c=' ';
    delete(s,length(s),1);
    readln (t,x,y);
  end;

 procedure readd(ii,parent,cnt:byte);
  var
   i,j:byte;
  begin
    for i:=1 to cnt do
     begin
       inc(c[ii]);
       gett(d[ii,c[ii]].name,d[ii,c[ii]].kids,d[ii,c[ii]].date);
       d[ii,c[ii]].dir:=parent;
       if d[ii,c[ii]].kids>0 then readd(ii,c[ii],d[ii,c[ii]].kids);
     end;
  end;

 procedure markk(i:byte);
  var
   j:byte;
  begin
    if not u[i] then begin
    u[i]:=true;
    if d[1,i].kids>0 then
     for j:=1 to d[1,i].kids do
      markk(i+j)
    else
     inc(ans);
     end;
  end;

begin
  assign (t,{'folders.in'}'');
  reset (t);
  readd(1,0,1);
  readd(2,0,1);
  close (t);

  for i:=1 to c[1] do
  if not u[i] then
   if d[1,i].kids>0 then
    begin
      fl:=false;
      for j:=1 to c[2] do
       if d[2,j].name=d[1,i].name then begin fl:=true; break; end;
      if (not fl)or(d[2,j].date<d[1,i].date)or(d[2,j].kids=0)or(d[2,j].dir<>d[1,i].dir) then
       markk(i);
    end
   else
    begin
      fl:=false;
      for j:=1 to c[2] do
       if d[2,j].name=d[1,i].name then begin fl:=true; break; end;
      if (not fl)or(d[2,j].date<d[1,i].date)or(d[2,j].kids>0)or(d[2,j].dir<>d[1,i].dir) then
       markk(i);
    end;
  assign (t,'');
  rewrite (t);
  writeln (t,ans);
  close (t);
end.