public class ScoreTable {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String[] str = sc.nextLine().trim().split("\\s+");
int n = Integer.parseInt(str[0]);// 学生人数
int m = Integer.parseInt(str[1]);// 科目数
String[] subjects = sc.nextLine().split("\\s+");//科目名称
List<Student> students = new ArrayList<>(n);
for(int i=0;i<n;i++){
String[] split = sc.nextLine().split("\\s+");// 学生姓名 各科成绩
String name = split[0];
int[] scores = new int[m];
for(int j=0;j<m;j++){
scores[j] = Integer.parseInt(split[j+1]);
}
students.add(new Student(name, scores));
}
String rankSubject = sc.nextLine().trim();// 需要排序的科目
//System.out.println(rankSubject);
if(Arrays.asList(subjects).contains(rankSubject)){// 包含排序科目
students.sort((o1, o2) -> {
int index = Arrays.asList(subjects).indexOf(rankSubject);
if(o1.getScores()[index] == o2.getScores()[index]){
return o1.getName().compareTo(o2.getName());
}
return o2.getScores()[index] - o1.getScores()[index];
});
}else{// 不包含排序科目,则按总分降序排序,总分相同则按字母序升序排序
students.sort((o1, o2) -> {
if(o1.getTotalScore() == o2.getTotalScore()){
return o1.getName().compareTo(o2.getName());
}
return o2.getTotalScore() - o1.getTotalScore();
});
}
StringBuilder sb = new StringBuilder();
students.forEach(student -> {
sb.append(student.getName()).append(" ");
});
System.out.println(sb.toString().trim());
}
}
static class Student{
String name;
int[] scores;
public Student(String name, int[] scores) {
this.name = name;
this.scores = scores;
}
public int getTotalScore(){
int sum = 0;
for(int i=0;i<scores.length;i++){
sum += scores[i];
}
return sum;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int[] getScores() {
return scores;
}
public void setScores(int[] scores) {
this.scores = scores;
}
}
}