var h,j,i,l,r,mid,n,m,q:longint; s,f,res:array [0..100005] of longint; t:array [0..100005] of char; d:array [char] of longint; goc:array [char]of char; k:array ['A'..'Z',0..100005] of longint; u:char; procedure sort(l,r: longint); var i,j,x,y,xx: longint; k:char; begin i:=l; j:=r; xx:=s[(l+r) div 2]; x:=f[(l+r) div 2]; repeat while (f[i]xx))do dec(j); if not(i>j) then begin y:=s[i]; s[i]:=s[j]; s[j]:=y; k:=t[i]; t[i]:=t[j]; t[j]:=k; y:=f[i]; f[i]:=f[j]; f[j]:=y; inc(i); j:=j-1; end; until i>j; if li then r:=mid-1 else l:=mid+1; end; end; procedure cnp3; begin l:=1;r:=d[goc[t[i]]]; while l<=r do begin mid:=(l+r) div 2; if (k[goc[t[i]],mid]i) then exit else if k[goc[t[i]],mid]>i then r:=mid-1 else l:=mid+1; end; mid:=-1; end; {procedure cnp4; begin l:=1;r:=d[goc4[t[i]]]; while l<=r do begin mid:=(l+r) div 2; if k[goc[t[i]],mid]=i then exit else if k[goc3[t[i]],mid]>i then r:=mid-1 else l:=mid+1; end; end; procedure cnp2; begin l:=1;r:=d[goc2[t[i]]]; while l<=r do begin mid:=(l+r) div 2; if k[goc2[t[i]],mid]=i then exit else if k[goc2[t[i]],mid]>i then r:=mid-1 else l:=mid+1; end; end; } procedure cnp1; begin l:=0;r:=n; while l<=r do begin mid:=(l+r) div 2; if (f[mid]<=s[i]) and ((f[mid+1]>s[i])or(mid+1=i)) then exit else if (f[mid+1]>s[i]) or (mid+1>i) then r:=mid-1 else l:=mid+1; end; end; procedure xuli; var j:longint; begin readln(m,n); for i:=1 to n do begin read(t[i]);read(u); end; for i:=1 to n do read(s[i]); for i:=1 to n do read(f[i]); sort(1,n); for u:='A' to 'Z' do d[u]:=0; for i:=1 to n do begin inc(d[t[i]]); k[t[i],d[t[i]]]:=i; end; k['C',d['C']+1]:=maxlongint-100; k['M',d['M']+1]:=maxlongint-100; k['E',d['E']+1]:=maxlongint-100; k['D',d['D']+1]:=maxlongint-100; q:=1; for i:=1 to n do begin cnp; res[i]:=res[k[t[i],mid-1]]+1; cnp3; if mid<>-1 then if res[i]