#include "bits/stdc++.h"
using namespace std;

template <class X>  void printKickStartTemplate(int testCaseNumber, X value) {
    cout << "Case #" << testCaseNumber << ": " << value << endl;
}

const int N = 100 + 2;
int t;
int n;
pair<int, int> data[N];

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> t;
    for (int T = 1; T <= t; T++) {
        cin >> n;
        long long totalSum = 0;
        long long currMaxSum = 0;
        long long currRem = 0;
        long long maxFound = 0;
        long long maxCurrRem = 0;
        for (int i = 1; i <= n; i++) {
            cin >> data[i].first >> data[i].second;
            totalSum += data[i].first;
        }
        currMaxSum = totalSum;
        maxFound = totalSum;

        priority_queue<pair<long long, long long>, vector<pair<long long, long long> >, greater<pair<long long, long long > > > pq;
        long long removedTillNow = 0;
        for (int i = 1; i <= n; i++) {
            if (totalSum - removedTillNow - data[i].first < data[i].second) {
                //needs to remove;

                removedTillNow += data[i].first;
                currRem ++;
                currMaxSum -= data[i].first;

                if (currMaxSum > maxFound) {
                    maxFound = max(maxFound, currMaxSum);
                    maxCurrRem = currRem;
                }

                while (!pq.empty()) {
                    int u = pq.top().first;
                    int v = pq.top().second;
                    if (u > totalSum - data[v].first - removedTillNow) {
                        //isko bhi remove karo
                        pq.pop();
                        removedTillNow += u;
                        currRem++;
                        currMaxSum -= 2 * u;
                        if (currMaxSum > maxFound) {
                            maxFound = max(maxFound, currMaxSum);
                            maxCurrRem = currRem;
                        }
                    } else break;
                }
            } else {
                pq.push({data[i].second, i});
                currMaxSum += data[i].first;
                if (currMaxSum > maxFound) {
                    maxFound = max(maxFound, currMaxSum);
                    maxCurrRem = currRem;
                }
            }
        }
        if (pq.size() > 1) {
            cout << "Case #" << T << ": " << currRem << " " << "INDEFINITELY" << endl;
        } else {
            cout << "Case #" << T << ": " << maxCurrRem << " " << maxFound << endl;
        }
    }
}