#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
typedef long long int ll;
#define BIG_NUM 2000000000
using namespace std;

struct Info1{
	Info1(int arg_x,int arg_y,int arg_w){
		x = arg_x;
		y = arg_y;
		w = arg_w;
	}
	bool operator<(const struct Info1 &arg) const{ //y?????????
			return y < arg.y;
	};
	int x,y,w;
};

struct Info2{
	Info2(int arg_x,int arg_w){
		x = arg_x;
		w = arg_w;
	}
	bool operator<(const struct Info2 &arg) const{ //x?????????
			return x < arg.x;
	};
	int x,w;
};

int main(){

	int N,tmp_x,tmp_y,tmp_w,pre_y,pre_x,index = -1,self,ans = 0,right;
	scanf("%d",&N);

	int* Y_VALUE = new int[N]; //?????????vector????????£??????y??§?¨?????¨???????????????????????????????

	//?????????y??????????????°??????????????????
	priority_queue<Info1> Q;

	for(int loop = 0; loop < N; loop++){
		scanf("%d %d %d",&tmp_x,&tmp_y,&tmp_w);
		Q.push(Info1(tmp_x,tmp_y,tmp_w));
	}

	vector<Info2> V[N];

	pre_y = BIG_NUM;

	while(!Q.empty()){
		if(Q.top().y != pre_y){ //??°??????y??????????????????
			index++;
			Y_VALUE[index] = Q.top().y; //??°??????y??????????¨????
			V[index].push_back(Info2(Q.top().x,Q.top().w));
		}else{
			V[index].push_back(Info2(Q.top().x,Q.top().w));
		}
		pre_y = Q.top().y;
		Q.pop();
	}
	index++;

	for(int i = 0; i < index; i++)sort(V[i].begin(),V[i].end()); //?????°???????????????x????????????sort

	/*for(int i = 0; i < index; i++){
		for(int k = 0; k < V[i].size(); k++){
			printf("y:%d x:%d\n",Y_VALUE[i],V[i][k].x);
		}
	}
*/
	pre_y = pre_x = BIG_NUM;

	int l,r,m,loc;

	for(int i = 0; i < index; i++){ //y?????????????????????
		for(int k = 0; k < V[i].size(); k++){ //x????????????

			//????????????????????????????§???¢????¨????
			if(pre_y == i && pre_x == V[i][k].x-1){ //??????????????????1?????????????????????????????????????????????????§???¢????¨??????????
				self = right;
			}else{ //????????????????????????????§???¢????¨??????????
				if(i == index - 1 || Y_VALUE[i] - Y_VALUE[i+1] > 1){ //?????????1??????????????????????????¨???????????´???
					ans = max(ans,V[i][k].w);	//????????????????¨??????????
					self = V[i][k].w;
				}else{
					//2?????¢?´¢??§???V[i][k]????????????????????????????????????????????¢???<?????????????£????????????°?????¢????´¢??§??????>
					l = 0;
					r = V[i+1].size()-1;
					m = (l+r)/2;
					loc = BIG_NUM;

					while(l <= r){
						if(V[i+1][m].x == V[i][k].x || V[i+1][m].x == V[i][k].x-1){ //????????????????????????????????°break
							loc = m;
							break;
						}else{
							if(V[i+1][m].x > V[i][k].x){
								r = m-1;
							}else{
								l = m+1;
							}
							m = (l+r)/2;
						}
					}

					if(loc == BIG_NUM){ //??????????????????????????????????????????????????¨???????????´???
						ans = max(ans,V[i][k].w);	//????????????????¨??????????
						self = V[i][k].w;
					}else{
						if(V[i+1][loc].x == V[i][k].x){ //??????????????§?????????????????´???
							self = V[i][k].w + V[i+1][loc].w;
							if(loc > 0 && V[i+1][loc-1].x == V[i][k].w - 1){ //????????????????????£?????????????????´???
								ans = max(ans,self+V[i+1][loc-1].w);
							}else{
								ans = max(ans,self);
							}
						}else{ //??????????????§?????????????????´???
							if(loc < V[i+1].size()-1 && V[i+1][loc+1].x == V[i][k].x){ //???????????????????????????????????????????????????????????´???
								self = V[i][k].w + V[i+1][loc+1].w;
							}else{ //?????????????????????????????´???
								self = V[i][k].w;
							}
							ans = max(ans,self+V[i+1][loc].w);
						}
					}
				}
			}

			//????????????????????????????§???¢????¨????<self????¨??????????>
			if(k < V[i].size()-1 && V[i][k+1].x == V[i][k].x+1){ //?????????????????????????????´???
				right = V[i][k+1].w;
			}else{
				right = 0;
			}

			if(i < index-1 && Y_VALUE[i+1] == Y_VALUE[i]-1){ //1?????????????????????????????´???
				//???????????????????????¢?´¢??§??¢???
				l = 0;
				r = V[i+1].size()-1;
				m = (l+r)/2;
				loc = BIG_NUM;

				while(l <= r){
					if(V[i+1][m].x == V[i][k].x+1){ //?????????????????????????????°break
						loc = m;
						break;
					}else{
						if(V[i+1][m].x > V[i][k].x){
							r = m-1;
						}else{
							l = m+1;
						}
						m = (l+r)/2;
					}
				}

				if(loc != BIG_NUM)right += V[i+1][loc].w;
			}

			ans = max(ans,self+right);

			pre_y = i;
			pre_x = V[i][k].x;
		}
	}

	printf("%d / 1\n",ans);

   return 0;
}

Measured memory_bytes: 9396