//#include <stdio.h>
//#include <map>
//#include <string>
//#include <algorithm>
//
//using namespace std;
//
//struct smap {
//    int number;
//    double time;
//};typedef struct smap Smap;
//
////プロトタイプ宣言
//bool tfsort (const Smap &a, const Smap &b);
//
////main関数
//int main(){
//    int i, number, cnt = 0, idx = 0;
//    double time;
//    Smap rec[50];
//    map<int, double> data;
//
//    //入力
//    for(i = 0;i < 24; i++){
//        scanf("%d %lf", &number, &time);
//        data[number] = time;
//    }
//    
//    
//    //map-構造体変換
//    for(auto &p: data){
//        rec[cnt] = (Smap){p.first, p.second};
//        cnt++;
//    }
//    
//    //3組ごとのソート
//    for(i = 0; i < 17; i += 8){
//        sort(rec + i, rec + i + 7, tfsort);
//    }
//    printf("---------------------\n");
//    //上位二組出力
//    for(i = 0; i < 3; i++){
//        printf("%d %0.2f\n", rec[idx].number, rec[idx].time);
//        printf("%d %0.2f\n", rec[idx + 1].number, rec[idx + 1].time);
//        rec[idx].time = -1.0;
//        rec[idx + 1].time = -1.0;
//        idx += 8;
//    }
//    
//    //全てのチームをソート
//    sort(rec, rec + 24, tfsort);
//    
//    //3位以下の上位二人を出力
//    for(i = 6; i < 8; i++){
//        printf("%d %0.2f\n", rec[i].number, rec[i].time);
//    }
//    
//    return 0;
//}
//
//bool tfsort (const Smap &a, const Smap &b){
//    if(a.time < b.time) return true;
//    return false;
//}
#include <stdio.h>
#include <map>
#include <string>
#include <algorithm>

using namespace std;

struct smap {
    int number;
    double time;
};typedef struct smap Smap;

//プロトタイプ宣言
bool tfsort (const Smap &a, const Smap &b);

//main関数
int main(){
    int i, number, cnt = 0, idx = 0;
    double time;
    Smap rec[50];
    map<int, double> data;
    
    //入力
    for(i = 0;i < 24; i++){
        scanf("%d %lf", &number, &time);
        data[number] = time;
    }
    
    
    //map-構造体変換
    for(auto &p: data){
        rec[cnt] = (Smap){p.first, p.second};
        cnt++;
    }
    
    //3組ごとのソート
    for(i = 0; i < 17; i += 8){
        sort(rec + i, rec + i + 8, tfsort);
    }
    printf("---------------------\n");
    //上位二組出力
    for(i = 0; i < 3; i++){
        printf("%d %0.2f\n", rec[idx].number, rec[idx].time);
        printf("%d %0.2f\n", rec[idx + 1].number, rec[idx + 1].time);
        rec[idx].time = 999999;
        rec[idx + 1].time = 999999;
        idx += 8;
    }
    
    //全てのチームをソート
    sort(rec, rec + 24, tfsort);
    
    //3位以下の上位二人を出力
    for(i = 0; i < 2; i++){
        printf("%d %0.2f\n", rec[i].number, rec[i].time);
    }
    
    return 0;
}

bool tfsort (const Smap &a, const Smap &b){
    if(a.time < b.time) return true;
    return false;
}