#include<stdio.h>
FILE *in, *out;
int n, i, colo, val, v[400001], maxuri[400001], minuri[400001], max, min, nextmax, nextmin, j, k , inter, mininter, startinter, dif1, dif2, start1, start2, lung1, lung2;
void searchmins()
{
int val, start, lung;
int i, j;
val = -400000;
minuri[nextmin] = n;
for(i = 0; i <= nextmin - 1; i++) {
for(j = minuri[i] + 1; j < minuri[i + 1]; j++) {
if((v[j] - v[minuri[i]] > val) && (j - minuri[i] <= (n / 2))) {
val = v[j] - v[minuri[i]];
start = minuri[i] + 1;
lung = j - start + 1;
}
}
}
dif1 = val;
start1 = start;
lung1 = lung;
}
void searchmaxs()
{
int val, start, lung;
int i, j, next;
val = -400000;
next = nextmax - 1;
for(i = maxuri[next] - 1; i >= 0; i--) {
if(next > 0 && i == maxuri[next - 1]) {
next--;
} else {
if((max - v[i] > val) && (maxuri[next] - i <= (n / 2))) {
val = max - v[i];
start = i + 1;
lung = maxuri[next] - start + 1;
}
}
}
dif2 = val;
start2 = start;
lung2 = lung;
}
int main ()
{
in = fopen("buline.in", "r");
out = fopen("buline.out", "w");
fscanf(in, "%d", &n);
for(i = 1; i <= n; i++) {
fscanf(in, "%d%d", &val, &colo);
if(colo == 0) {
v[i] = 0 - val;
} else {
v[i] = val;
}
v[i + n] = v[i];
}
v[2 * n] = 0;
min = 2147483647;
max = -2147483647;
nextmax = 0;
nextmin = 0;
for(i = 1; i < 2 * n; i++) {
v[i] = v[i] + v[i - 1];
}
n = 2 * n;
/*
for(i = 0; i <= n; i++) {
printf("%d ", v[i]);
}
*/
for(i = 0; i < n; i++) {
if(v[i] < min) {
min = v[i];
minuri[0] = i;
nextmin = 1;
} else {
if(v[i] == min) {
minuri[nextmin] = i;
nextmin++;
} else {
if(v[i] > max) {
max = v[i];
maxuri[0] = i;
nextmax = 1;
} else {
if(v[i] == max) {
maxuri[nextmax] = i;
nextmax++;
}
}
}
}
}
/*
printf("\n");
for(i = 0; i < n; i++) {
printf("%d ", maxuri[i]);
}
printf("\n");
for(i = 0; i < n; i++) {
printf("%d ", minuri[i]);
}
*/
mininter = 400000;
j = 0;
k = 0;
for(i = 0; i < n; i++) {
if(j != nextmin && i == minuri[j]) {
if(j >= 0 && j <= nextmin - 1) {
j++;
}
}
if(i == maxuri[k] && k != nextmax) {
//printf("GAY");
if(j >= 1) {
//printf("GAY");
inter = maxuri[k] - minuri[j - 1];
//printf("%d", inter);
if(inter < mininter && ((maxuri[k] - minuri[j - 1]) <= (n / 2))) {
mininter = inter;
startinter = minuri[j - 1] + 1;
}
}
if(k >= 0 && k <= nextmax - 1) {
k++;
}
}
}
if(mininter == 400000) {
//printf("HUEHUEHEUHEU");
searchmins();
searchmaxs();
if(dif1 > dif2) {
fprintf(out, "%d %d %d", dif1, start1, lung1);
} else {
if(dif1 == dif2) {
if(start1 < start2) {
fprintf(out, "%d %d %d", dif1, start1, lung1);
} else {
if(start1 > start2) {
fprintf(out, "%d %d %d", dif2, start2, lung2);
} else {
if(lung1 > lung2) {
fprintf(out, "%d %d %d", dif2, start2, lung2);
} else {
fprintf(out, "%d %d %d", dif1, start1, lung1);
}
}
}
} else {
fprintf(out, "%d %d %d", dif2, start2, lung2);
}
}
} else {
fprintf(out, "%d %d %d ", max - min, startinter, mininter);
}
fclose(in);
fclose(out);
return 0;
}