{
TASK:folders
LANG:PASCAL
}

program folders;

type PFolder = ^TFolder;
     TFolder = record
      Name:string[9];
      Weight:Word;
      CTime:Word;
      Sub:Byte;
      Next:array[1..9] of PFolder;
     end;

var A,B:PFolder;
    FilesMoved:Word;

procedure AddFolder(var AFolder:PFolder;const AName:string[9];const ATime:Word;const ASub:Byte);
var iNext:Byte;
begin
 New(AFolder);
 AFolder^.Name := AName;
 AFolder^.CTime := ATime;
 AFolder^.Weight := 0;
 AFolder^.Sub := ASub;
 for iNext := 1 to 9 do AFolder^.Next[iNext] := Nil;
end;

procedure ReadFolder(var PrevFolder:PFolder);
var Line,Other:string;
    AName:string[9];
    ATime:Word;
    iRead,ASub:Byte;
    ch:char;
begin
 Readln(Line);

 iRead := 0;
 AName := '';
 repeat
  Inc(iRead);
  ch := line[iRead];
  If not(ch = ' ') then AName := AName + ch;
 until (ch = ' ');

 Other := '';
 repeat
  inc(iRead);
  ch := line[iRead];
  If not(ch = ' ') then Other := Other + ch;
 until (ch = ' ');
 Val(Other,ASub);

 Other := '';
 repeat
  Inc(iRead);
  ch := line[iRead];
  If not(ch = ' ') then Other := Other + ch;
 until (iread = Length(line)) or (ch = ' ');
 Val(Other,ATime);

 AddFolder(PrevFolder,AName,ATime,ASub);

 for iRead := 1 to ASub do begin
  ReadFolder(PrevFolder^.Next[iRead]);
 end;
end;


procedure FreeFolder(var AFolder:PFolder);
var iSub:Byte;
begin
 If (AFolder = Nil) then Exit;
 for iSub := 1 to AFolder^.Sub do FreeFolder(AFolder^.Next[iSub]);
 Dispose(AFolder);
end;

procedure Input;
begin
 FilesMoved := 0;
 ReadFolder(A);
 ReadFolder(B);
end;

function GetWeight(var AFolder:PFolder):Word;
var SumWeight:Word;
    iSub:Byte;
begin
 If (AFolder = Nil) then Exit;
 If (AFolder^.Sub = 0) then begin
  GetWeight := 1;
  AFolder^.Weight := 1;
  Exit;
 end else begin
  SumWeight := 0;
  for iSub := 1 to AFolder^.Sub do Inc(SumWeight,GetWeight(AFolder^.Next[iSub]));
  AFolder^.Weight := SumWeight;
  GetWeight := SumWeight;
 end;
end;

function FindName(var AFolder:PFolder;const AName:string):Byte;
var iSub,Res:Byte;
begin
 Res := 0;
 for iSub := 1 to AFolder^.Sub do begin
  If not(AFolder^.Next[iSub] = Nil) and (AFolder^.Next[iSub]^.Name = AName) then begin
   FindName := iSub;
   Exit;
  end;
 end;
 FindName := Res;
end;

procedure RunDeep(var AFolder,BFolder:PFolder);
var iSub,search:Byte;
begin
 If (AFolder = Nil) then Exit;
 If (AFolder^.CTime > BFolder^.CTime) then Inc(FilesMoved,AFolder^.Weight)
 else begin
  for iSub := 1 to AFolder^.Sub do begin
   search := FindName(BFolder,AFolder^.Next[iSub]^.Name);
   If (search > 0) then begin RunDeep(AFolder^.Next[iSub],BFolder^.Next[search]);
   end else Inc(FilesMoved,AFolder^.Next[iSub]^.Weight);
  end;
 end
end;

procedure Output;
begin
 Writeln(FilesMoved);
 FreeFolder(A);
 FreeFolder(B);
end;

begin
 Input;
 GetWeight(A);
 RunDeeP(A,B);
 Output;
end.
