#include <tuple>
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

vector<tuple<int, int, string>> v;
int contains(string name){
	for(int i = 0; i < v.size(); i++)
		if(std::get<2>(v[i]) == name)
			return i;
	return -1;
}

int main() {
//	freopen("f.txt","r",stdin);
	for(int i = 0; i < 6; i++){
		string s1,s2;
		int g1,g2,pos;
		cin >> s1 >> s2;
		cin >> g1 >> g2;
		if(g1 > g2){
			if((pos = contains(s1)) == -1){
				v.push_back(std::make_tuple(3,g1,s1));
			}
			else
				v[pos] = std::make_tuple(get<0>(v[pos]) + 3, get<1>(v[pos]) + g1,s1);
			if((pos = contains(s2)) == -1){
				v.push_back(std::make_tuple(0,g2,s2));
			}
			else
				v[pos] = std::make_tuple(get<0>(v[pos]), get<1>(v[pos]) + g2,s2);

		}

				
		else
			if(g1 == g2){
				if((pos = contains(s1)) == -1){
					v.push_back(std::make_tuple(1,g1,s1));
				}
				else
					v[pos] = std::make_tuple(get<0>(v[pos]) + 1, get<1>(v[pos]) + g1,s1);
				if((pos = contains(s2)) == -1){
					v.push_back(std::make_tuple(1,g2,s2));
				}
				else
					v[pos] = std::make_tuple(get<0>(v[pos]) + 1, get<1>(v[pos]) + g2,s2);

			}
			else{
				if((pos = contains(s1)) == -1){
					v.push_back(std::make_tuple(0,g1,s1));
				}
				else
					v[pos] = std::make_tuple(get<0>(v[pos]), get<1>(v[pos]) + g1,s1);
				if((pos = contains(s2)) == -1){
					v.push_back(std::make_tuple(3,g2,s2));
				}
				else
					v[pos] = std::make_tuple(get<0>(v[pos]) + 3, get<1>(v[pos]) + g2,s2);


			}
		
		
	}
  sort(v.begin(),v.end(),
       [](const tuple<int,int,string>& a,
       const tuple<int,int,string>& b) -> bool
       {
         return std::get<1>(a) > std::get<1>(b);
       });
  for(int i = 0; i < 4; i++)
	  cout << get<2>(v[i]) << '\n';
 // cout << std::get<2>(v[0]) << endl;
  return 0;
}