#include<bits/stdc++.h>
using namespace std;
int n,m;
map<long long,int>a;
int dm[17]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};
struct node
{
long long number;
bool Gender;
int PEclassGr,longrunGr,bodyGr,sunshineGr,endGr,gooutGr,firstGr,allGr;
int gooutTi,campTi,sunshineTi;
int days;
}id[100005];
int count(int h,int m,int s,int hh,int mm,int ss)
{
return hh*60*60+mm*60+ss-h*60*60-m*60-s;
}
int goout(int j){
if(j>=18)return 5;
if(j>=15)return 4;
if(j>=12)return 3;
if(j>=9)return 2;
if(j>=6)return 1;
return 0;
}
void jinitaimei(int j){
if(j >= 95 && j <= 100) puts("A");
else if(j >= 90 && j < 95) puts("A-");
else if(j >= 85 && j < 90) puts("B+");
else if(j >= 80 && j < 85) puts("B");
else if(j >= 77 && j < 80) puts("B-");
else if(j >= 73 && j < 77) puts("C+");
else if(j >= 70 && j < 73) puts("C");
else if(j >= 67 && j < 70) puts("C-");
else if(j >= 63 && j < 67) puts("D+");
else if(j >= 60 && j < 63) puts("D");
else puts("F");
}
int sun(int j){
if(j>=21)return 10;
if(j>=19)return 9;
if(j>=17)return 8;
if(j>=14)return 7;
if(j>=11)return 6;
if(j>=7)return 4;
if(j>=3)return 2;
return 0;
}
void sunshinerungrade(int mon,int dat,int num,int h1,int m1,int s1,int h2,int m2,int s2,float lon,int fre,int s)
{
int x=a[num];
if((id[x].Gender==0&&lon<=1500)||(id[x].Gender==1&&lon<=3000))return ;
float tl=count(h1,m1,s1,h2,m2,s2);
if((lon/tl)<2||(lon/tl)>5)return ;
if(fre>270)return ;
if(lon/s>1.5)return ;
long long now=(dm[mon]+dat-1)*24*60*60+h1*60*60+m1*60+s1;
if(now-id[x].days<6*60*60)return ;
id[x].sunshineTi++;
id[x].days=(dm[mon]+dat-1)*24*60*60+h2*60*60+m2*60+s2;
}
int longrungrade(bool g,int time)
{
if(g==0){
if(time<=400)return 20;
if(time<=417)return 18;
if(time<=434)return 16;
if(time<=451)return 14;
if(time<=470)return 12;
if(time<=485)return 10;
if(time<=500)return 8;
if(time<=515)return 6;
if(time<=530)return 4;
if(time<=540)return 2;
return 0;
}
if(g==1){
if(time<=750)return 20;
if(time<=780)return 18;
if(time<=810)return 16;
if(time<=840)return 14;
if(time<=870)return 12;
if(time<=910)return 10;
if(time<=950)return 8;
if(time<=990)return 6;
if(time<=1030)return 4;
if(time<=1080)return 2;
return 0;
}
}
void read1()
{
cin>>n;
char gen,body;
for(int i=1;i<=n;i++){
cin>>id[i].number;
a[id[i].number]=i;
id[i].days=-0x3f3f3f3f;
cin>>gen;
if(gen=='M')id[i].Gender=1;else id[i].Gender=0;
cin>>id[i].PEclassGr;
int m,s;
scanf("%d'%d\"",&m,&s);
id[i].longrunGr=longrungrade(id[i].Gender,60*m+s);
cin>>body;
if(body=='P')id[i].bodyGr=10;else id[i].bodyGr=0;
cin>>id[i].endGr>>id[i].campTi;
}
}
void read2(){
cin>>m;
long long d,num,hstart,mstart,sstart,hend,mend,send;
float l;
int aa,bb,s;
for(int i=1;i<=m;i++){
cin>>d>>num;
scanf("%d:%d:%d",&hstart,&mstart,&sstart);
scanf("%d:%d:%d",&hend,&mend,&send);
cin>>l;
scanf("%d'%d\"",&aa,&bb);
cin>>s;
sunshinerungrade(d%10000/100,d%1000000,num,hstart,mstart,sstart,hend,mend,send,l*1000,aa*60+bb,s);
}
}
void out()
{
for(int i=1;i<=n;i++){
id[i].gooutTi=id[i].sunshineTi+id[i].campTi;
id[i].gooutGr=goout(id[i].gooutTi);
id[i].firstGr=id[i].endGr+id[i].gooutGr;
id[i].sunshineGr=sun(id[i].sunshineTi);
id[i].allGr=id[i].bodyGr+id[i].firstGr+id[i].longrunGr+id[i].sunshineGr+id[i].PEclassGr;
cout<<id[i].number<<" "<<id[i].allGr<<" ";
jinitaimei(id[i].allGr);
cout<<endl;
}
}
int main(){
read1();
read2();
out();
return 0;
}