#include "bits/stdc++.h"
using namespace std;
struct Nodo{
vector< pair<int, int> > Mejores;
};
Nodo operator+(const Nodo& a, const Nodo& b){
Nodo c;
for(auto E: a.Mejores) c.Mejores.push_back(E);
for(auto E: b.Mejores) c.Mejores.push_back(E);
sort(c.Mejores.rbegin(), c.Mejores.rend());
Nodo r;
set<int> Usados;
for(auto E: c.Mejores){
if(Usados.find(E.second) == Usados.end()){
r.Mejores.push_back(E);
Usados.insert(E.second);
if(r.Mejores.size() == 3) break;
}
}
while(r.Mejores.size() < 3) r.Mejores.push_back({-2, -2});
return r;
}
bool operator<(const Nodo& a, const Nodo& b){
return a.Mejores[0].first < b.Mejores[0].first;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n = 0, k;
cin>>k;
vector<Nodo> a;
for(int i = 0; i < k; i++){
int m;
cin>>m;
n += m;
while(m--){
int v;
cin>>v;
vector< pair<int, int> > Extra = {{v, i + 1}, {-2, -2}, {-2, -2}};
Nodo Nuevo;
Nuevo.Mejores = Extra;
a.push_back(Nuevo);
}
}
sort(a.begin(), a.end());
for(int i = 1; i < n; i++){
if(i >= 2){
int j = 0, k = 0;
for(; j < 2; j++){
for(k = j + 1; k < 3; k++){
if(a[i - 1].Mejores[j].first != -2 and a[i - 1].Mejores[k].first != -2 and a[i].Mejores[0].first < a[i - 1].Mejores[j].first + a[i - 1].Mejores[k].first and a[i].Mejores[0].second != a[i - 1].Mejores[j].second and a[i].Mejores[0].second != a[i - 1].Mejores[k].second and a[i - 1].Mejores[j].second != a[i - 1].Mejores[k].second){
cout<<a[i].Mejores[0].second<<" "<<a[i].Mejores[0].first<<" "<<a[i - 1].Mejores[j].second<<" "<<a[i - 1].Mejores[j].first<<" "<<a[i - 1].Mejores[k].second<<" "<<a[i - 1].Mejores[k].first;
return 0;
}
}
}
}
a[i] = a[i] + a[i - 1];
}
cout<<"NIE";
return 0;
}