#include<bits/stdc++.h>
using namespace std;
int string_to_int(string);
int day_to_int(int s){
int mon=s/100,day=s%100;
int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int res=0;
for(int i=1;i<=mon-1;i++) res+=month[i];
res+=day;
return res;
}
struct record{
int date;
long long number;
int start_time,end_time;
int total_time;
int run_dis;
int pause_time;
int step_num;
};
struct student{
long long number;
bool male;
int P_E_score;
int long_run_time,long_run_score;
vector<record> run_re;
int sunny_run_score;
int ok_time,class_training_time;
inline int get_stopping_time(int i){
return run_re[i].start_time-run_re[i-1].end_time;
}
void get_sunny_run_score(){
ok_time=0;
for(int i=0;i<=run_re.size();i++){
if(run_re[i].run_dis<(male?3000:1500)) continue;
if(run_re[i].run_dis*1.0/run_re[i].total_time<2||run_re[i].run_dis*1.0/run_re[i].total_time>5) continue;
if(run_re[i].pause_time>270) continue;
if(run_re[i].run_dis*1.0/run_re[i].step_num>1.5) continue;
if(i==0){
ok_time++;
continue;
}
if(run_re[i].date!=run_re[i-1].date){
if(day_to_int(run_re[i].date)-day_to_int(run_re[i-1].date)>1){
ok_time++;
continue;
}
if(run_re[i].start_time+24*3600-run_re[i-1].end_time>=6*3600){
ok_time++;
continue;
}
}else{
if(get_stopping_time(i)>=3600*6){
ok_time++;
continue;
}
}
printf("i=%d\tOops there's only one condition you didn't accepted!!!\n",i);
}
if(ok_time<=2) sunny_run_score=0;
else if(ok_time<=6) sunny_run_score=2;
else if(ok_time<=10) sunny_run_score=4;
else if(ok_time<=13) sunny_run_score=6;
else if(ok_time<=16) sunny_run_score=7;
else if(ok_time<=18) sunny_run_score=8;
else if(ok_time<=20) sunny_run_score=9;
else sunny_run_score=10;
}
int body_score;
int go_out,go_out_score,final_exam;
int total;
string grade;
};
int n,m;
student st[10010];
string tmp;
record rp;
inline int pow10_(int t){
int res=1;
while(t--) res*=10;
return res;
}
int string_to_int(string s){
int res=0;
for(int i=s.size()-1,j=0;i>=0;i--,j++) res+=(s[i]-'0')*pow10_(j);
return res;
}
bool cmp(student a,student b){
return a.number<b.number;
}
inline int change(int m,int s){return m*60+s;}
int main(){
scanf("%d",&n);
getchar();
char c,cc;
int pn,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
for(int i=1;i<=n;i++){
scanf("%lld %c %d %d'%d\" %c %d %d",&st[i].number,&c,&st[i].P_E_score,&t1,&t2,&cc,&st[i].final_exam,&st[i].class_training_time);
st[i].male=(c=='M');
st[i].long_run_time=t1*60+t2;
if(st[i].male){
if(st[i].long_run_time<=change(12,30)) st[i].long_run_score=20;
else if(st[i].long_run_time<=change(13,0)) st[i].long_run_score=18;
else if(st[i].long_run_time<=change(13,30)) st[i].long_run_score=16;
else if(st[i].long_run_time<=change(14,0)) st[i].long_run_score=14;
else if(st[i].long_run_time<=change(14,30)) st[i].long_run_score=12;
else if(st[i].long_run_time<=change(15,10)) st[i].long_run_score=10;
else if(st[i].long_run_time<=change(15,50)) st[i].long_run_score=8;
else if(st[i].long_run_time<=change(16,30)) st[i].long_run_score=6;
else if(st[i].long_run_time<=change(17,10)) st[i].long_run_score=4;
else if(st[i].long_run_time<=change(18,0)) st[i].long_run_score=2;
else st[i].long_run_score=0;
}else{
if(st[i].long_run_time<=change(6,40)) st[i].long_run_score=20;
else if(st[i].long_run_time<=change(6,57)) st[i].long_run_score=18;
else if(st[i].long_run_time<=change(7,14)) st[i].long_run_score=16;
else if(st[i].long_run_time<=change(7,31)) st[i].long_run_score=14;
else if(st[i].long_run_time<=change(7,50)) st[i].long_run_score=12;
else if(st[i].long_run_time<=change(8,5)) st[i].long_run_score=10;
else if(st[i].long_run_time<=change(8,20)) st[i].long_run_score=8;
else if(st[i].long_run_time<=change(8,35)) st[i].long_run_score=6;
else if(st[i].long_run_time<=change(8,50)) st[i].long_run_score=4;
else if(st[i].long_run_time<=change(9,0)) st[i].long_run_score=2;
else st[i].long_run_score=0;
}
st[i].body_score=(cc=='P')*10;
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d %lld %d:%d:%d %d:%d:%d %d.%d %d'%d\" %d",&rp.date,&rp.number,&t1,&t2,&t3,&t4,&t5,&t6,&t9,&t10,&t7,&t8,&rp.step_num);
for(int j=1;j<=n;j++)
if(st[j].number==rp.number){
pn=j;
break;
}
rp.run_dis=t9*1000+t10*10;
rp.date-=20170000;
rp.start_time=t1*3600+t2*60+t3;
rp.end_time=t4*3600+t5*60+t6;
rp.pause_time=t7*60+t8;
rp.total_time=rp.end_time-rp.start_time;
st[pn].run_re.push_back(rp);
}
for(int i=1;i<=n;i++){
st[i].get_sunny_run_score();
st[i].go_out=st[i].class_training_time+st[i].ok_time;
if(st[i].go_out<=5) st[i].go_out_score=0;
else if(st[i].go_out<=8) st[i].go_out_score=1;
else if(st[i].go_out<=11) st[i].go_out_score=2;
else if(st[i].go_out<=14) st[i].go_out_score=3;
else if(st[i].go_out<=17) st[i].go_out_score=4;
else st[i].go_out_score=5;
st[i].total=st[i].P_E_score+st[i].sunny_run_score+st[i].long_run_score+st[i].body_score+st[i].final_exam+st[i].go_out_score;
if(st[i].total>=95) st[i].grade="A+";
else if(st[i].total>=90) st[i].grade="A";
else if(st[i].total>=85) st[i].grade="B+";
else if(st[i].total>=80) st[i].grade="B";
else if(st[i].total>=77) st[i].grade="B-";
else if(st[i].total>=73) st[i].grade="C+";
else if(st[i].total>=70) st[i].grade="C";
else if(st[i].total>=67) st[i].grade="C-";
else if(st[i].total>=63) st[i].grade="D+";
else if(st[i].total>=60) st[i].grade="D";
else if(st[i].total>=0) st[i].grade="F";
}
sort(st+1,st+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<st[i].number<<" "<<st[i].total<<" "<<st[i].grade<<endl;
}
}