#include <bits/stdc++.h>
using namespace std;
bool memory1;
typedef long long ll;
typedef unsigned long long ull;
typedef double dbe;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;
typedef vector<ll> vll;
typedef vector<int> vii;
#define openFile(name) freopen((name ".inp"), "r", stdin), freopen((name ".out"), "w", stdout)
#define FOR(i, a, b, x) for (int i = (a); i <= (b); i += (x))
#define ROF(i, a, b, x) for (int i = (a); i >= (b); i += (x))
#define fi first
#define se second
#define MASK(x) (1LL << (x))
#define getBit(mask, i) (((mask) >> (i)) & 1)
#define BitOn(mask) (__builtin_popcountll(mask))
const int maxN = 2e5 + 5;
//const ll maxBit = MASK(8) + 2;
const ll LOG = 20;
const ll INF18 = 1e18;
const int INF9 = 1e9;
//const ll INF3f = 0x3f3f3f3f3f3f3f3f;
const ll MOD = 1e9 + 7;
//////////////////////////////////////////////
/////////////////nhan0123456//////////////////
//////////////////////////////////////////////
struct SegmentTree {
vll stWei, stMin;
int n;
SegmentTree() {}
SegmentTree(int _) {
n = _;
stWei.assign(4 * n + 7, 0);
stMin.assign(4 * n + 7, 0);
}
void update(int u, ll v) {
int id = 1, l = 1, r = n;
while (l < r) {
int mid = (l + r) >> 1;
if (u > mid) {id = 2 * id + 1; l = mid + 1;}
else {id = 2 * id; r = mid;}
}
stWei[id] = v;
stMin[id] = stWei[id];
while (id /= 2) {
stWei[id] = stWei[2 * id] + stWei[2 * id + 1];
stMin[id] = min(stMin[2 * id], stMin[2 * id + 1]);
}
}
// tim vi tri i xa 1 nhat sao cho 1..i <= val
int walkSum(ll val) {return walkSum(val, 1, 1, n);}
int walkSum(ll val, int id, int l, int r) {
if (l == r) return stWei[id] <= val ? l : -1;
int mid = (l + r) >> 1;
if (stWei[2 * id] > val) return walkSum(val, 2 * id, l, mid);
int t = walkSum(val - stWei[2 * id], 2 * id + 1, mid + 1, r);
if (t != -1) return t;
return walkSum(val, 2 * id, l, mid);
}
// tim vi tri i gan 1 nhat sao cho ai <= val
int walkMin(int L, ll val) {return walkMin(L, val, 1, 1, n);}
int walkMin(int L, ll val, int id, int l, int r) {
if (stMin[id] > val) return -1;
if (r < L) return -1;
if (l == r) return stMin[id] <= val ? l : -1;
int mid = (l + r) >> 1;
int t = walkMin(L, val, 2 * id, l, mid);
if (t != -1) return t;
return walkMin(L, val, 2 * id + 1, mid + 1, r);
}
ll get(int u, int v) {return get(u, v, 1, 1, n);}
ll get(int u, int v, int id, int l, int r) {
if (r < u || v < l || u > v) return 0;
if (u <= l && r <= v) return stWei[id];
int mid = (l + r) >> 1;
ll g1 = get(u, v, 2 * id, l, mid);
ll g2 = get(u, v, 2 * id + 1, mid + 1, r);
return g1 + g2;
}
};
struct BIT {
vll bit;
int n;
BIT() {}
BIT(int _) {
n = _;
bit.assign(n + 2, 0);
}
void update(int i, ll val) {
for (; i <= n; i += i & -i) bit[i] += val;
}
ll get(int i) {
ll ans = 0;
for (; i > 0; i -= i & -i) ans += bit[i];
return ans;
}
ll get(int l, int r) {return get(r) - get(l - 1);}
};
ll n, P;
pll a[maxN];
int id[maxN];
bool ssHp(int i, int j) {
return a[i].fi > a[j].fi;
}
void Solve() {
FOR (i, 1, n, 1) id[i] = i;
sort(id + 1, id + n + 1, ssHp);
// FOR (i, 1, n, 1) cout << i << " " << a[id[i]].fi << " " << a[id[i]].se << "\n";
SegmentTree ST(n);
BIT bit(n);
ll ansHp = 0, ansT = INF18; // chon hp mx kchon T min
FOR (i, 1, n, 0) {
int j = i;
while (j <= n && a[id[i]].fi == a[id[j]].fi) {
ST.update(id[j], a[id[j]].se);
bit.update(id[j], a[id[j]].fi);
++j;
}
ll tmpHp = 0, tmpT = a[id[j]].fi;
if (j > n) tmpT = 0;
ll val = P;
int cur = ST.walkMin(1, val);
while (cur != -1) {
ll tmpVal = ST.get(1, cur - 1) + val;
int nxt = ST.walkSum(tmpVal);
if (nxt == -1) break;
tmpHp += bit.get(cur, nxt);
val -= ST.get(cur, nxt);
if (nxt + 1 > n) break;
cur = ST.walkMin(nxt + 1, val);
}
if (ansHp < tmpHp) {
ansHp = tmpHp;
ansT = tmpT;
}
else if (ansHp == tmpHp)
ansT = min(ansT, tmpT);
// if (ansHp == 13487) {
// int x = 1;
// }
i = j;
}
cout << ansHp << " " << ansT;
}
void input() {
int T;
cin >> T;
while (T--) {
cin >> n >> P;
FOR (i, 1, n, 1) cin >> a[i].fi >> a[i].se;
Solve();
cout << "\n";
}
}
int main() {
openFile("FESTIVAL");
ios_base::sync_with_stdio(0);
cin.tie(0);
input();
//bool memory2;
//cerr << "\n\n\nTime: "<< 1000.0 * clock() / CLOCKS_PER_SEC << " ms";
//cerr << "\n\n\nMemory: "<< abs(&memory1 - &memory2) * 1.0 / MASK(20) <<" MB";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmJvb2wgbWVtb3J5MTsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgZG91YmxlIGRiZTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aWk7CgojZGVmaW5lIG9wZW5GaWxlKG5hbWUpIGZyZW9wZW4oKG5hbWUgIi5pbnAiKSwgInIiLCBzdGRpbiksIGZyZW9wZW4oKG5hbWUgIi5vdXQiKSwgInciLCBzdGRvdXQpCiNkZWZpbmUgRk9SKGksIGEsIGIsIHgpIGZvciAoaW50IGkgPSAoYSk7IGkgPD0gKGIpOyBpICs9ICh4KSkKI2RlZmluZSBST0YoaSwgYSwgYiwgeCkgZm9yIChpbnQgaSA9IChhKTsgaSA+PSAoYik7IGkgKz0gKHgpKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTUFTSyh4KSAoMUxMIDw8ICh4KSkKI2RlZmluZSBnZXRCaXQobWFzaywgaSkgKCgobWFzaykgPj4gKGkpKSAmIDEpCiNkZWZpbmUgQml0T24obWFzaykgKF9fYnVpbHRpbl9wb3Bjb3VudGxsKG1hc2spKQoKY29uc3QgaW50IG1heE4gPSAyZTUgKyA1OwovL2NvbnN0IGxsIG1heEJpdCA9IE1BU0soOCkgKyAyOwpjb25zdCBsbCBMT0cgPSAyMDsKY29uc3QgbGwgSU5GMTggPSAxZTE4Owpjb25zdCBpbnQgSU5GOSA9IDFlOTsKLy9jb25zdCBsbCBJTkYzZiA9IDB4M2YzZjNmM2YzZjNmM2YzZjsKY29uc3QgbGwgTU9EID0gMWU5ICsgNzsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vLy8vLy8vLy8vLy8vLy9uaGFuMDEyMzQ1Ni8vLy8vLy8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgpzdHJ1Y3QgU2VnbWVudFRyZWUgewogICAgdmxsIHN0V2VpLCBzdE1pbjsKICAgIGludCBuOwogICAgU2VnbWVudFRyZWUoKSB7fQogICAgU2VnbWVudFRyZWUoaW50IF8pIHsKICAgICAgICBuID0gXzsKICAgICAgICBzdFdlaS5hc3NpZ24oNCAqIG4gKyA3LCAwKTsKICAgICAgICBzdE1pbi5hc3NpZ24oNCAqIG4gKyA3LCAwKTsKICAgIH0KICAgIHZvaWQgdXBkYXRlKGludCB1LCBsbCB2KSB7CiAgICAgICAgaW50IGlkID0gMSwgbCA9IDEsIHIgPSBuOwogICAgICAgIHdoaWxlIChsIDwgcikgewogICAgICAgICAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgICAgICAgICBpZiAodSA+IG1pZCkge2lkID0gMiAqIGlkICsgMTsgbCA9IG1pZCArIDE7fQogICAgICAgICAgICBlbHNlIHtpZCA9IDIgKiBpZDsgciA9IG1pZDt9CiAgICAgICAgfQogICAgICAgIHN0V2VpW2lkXSA9IHY7CiAgICAgICAgc3RNaW5baWRdID0gc3RXZWlbaWRdOwoKICAgICAgICB3aGlsZSAoaWQgLz0gMikgewogICAgICAgICAgICBzdFdlaVtpZF0gPSBzdFdlaVsyICogaWRdICsgc3RXZWlbMiAqIGlkICsgMV07CiAgICAgICAgICAgIHN0TWluW2lkXSA9IG1pbihzdE1pblsyICogaWRdLCBzdE1pblsyICogaWQgKyAxXSk7CiAgICAgICAgfQogICAgfQogICAgLy8gdGltIHZpIHRyaSBpIHhhIDEgbmhhdCBzYW8gY2hvIDEuLmkgPD0gdmFsCiAgICBpbnQgd2Fsa1N1bShsbCB2YWwpIHtyZXR1cm4gd2Fsa1N1bSh2YWwsIDEsIDEsIG4pO30KICAgIGludCB3YWxrU3VtKGxsIHZhbCwgaW50IGlkLCBpbnQgbCwgaW50IHIpIHsKICAgICAgICBpZiAobCA9PSByKSByZXR1cm4gc3RXZWlbaWRdIDw9IHZhbCA/IGwgOiAtMTsKCiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICBpZiAoc3RXZWlbMiAqIGlkXSA+IHZhbCkgcmV0dXJuIHdhbGtTdW0odmFsLCAyICogaWQsIGwsIG1pZCk7CiAgICAgICAgaW50IHQgPSB3YWxrU3VtKHZhbCAtIHN0V2VpWzIgKiBpZF0sIDIgKiBpZCArIDEsIG1pZCArIDEsIHIpOwogICAgICAgIGlmICh0ICE9IC0xKSByZXR1cm4gdDsKICAgICAgICByZXR1cm4gd2Fsa1N1bSh2YWwsIDIgKiBpZCwgbCwgbWlkKTsKICAgIH0KICAgIC8vIHRpbSB2aSB0cmkgaSBnYW4gMSBuaGF0IHNhbyBjaG8gYWkgPD0gdmFsCiAgICBpbnQgd2Fsa01pbihpbnQgTCwgbGwgdmFsKSB7cmV0dXJuIHdhbGtNaW4oTCwgdmFsLCAxLCAxLCBuKTt9CiAgICBpbnQgd2Fsa01pbihpbnQgTCwgbGwgdmFsLCBpbnQgaWQsIGludCBsLCBpbnQgcikgewogICAgICAgIGlmIChzdE1pbltpZF0gPiB2YWwpIHJldHVybiAtMTsKICAgICAgICBpZiAociA8IEwpIHJldHVybiAtMTsKICAgICAgICBpZiAobCA9PSByKSByZXR1cm4gc3RNaW5baWRdIDw9IHZhbCA/IGwgOiAtMTsKCiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICBpbnQgdCA9IHdhbGtNaW4oTCwgdmFsLCAyICogaWQsIGwsIG1pZCk7CiAgICAgICAgaWYgKHQgIT0gLTEpIHJldHVybiB0OwogICAgICAgIHJldHVybiB3YWxrTWluKEwsIHZhbCwgMiAqIGlkICsgMSwgbWlkICsgMSwgcik7CiAgICB9CiAgICBsbCBnZXQoaW50IHUsIGludCB2KSB7cmV0dXJuIGdldCh1LCB2LCAxLCAxLCBuKTt9CiAgICBsbCBnZXQoaW50IHUsIGludCB2LCBpbnQgaWQsIGludCBsLCBpbnQgcikgewogICAgICAgIGlmIChyIDwgdSB8fCB2IDwgbCB8fCB1ID4gdikgcmV0dXJuIDA7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpIHJldHVybiBzdFdlaVtpZF07CgogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgbGwgZzEgPSBnZXQodSwgdiwgMiAqIGlkLCBsLCBtaWQpOwogICAgICAgIGxsIGcyID0gZ2V0KHUsIHYsIDIgKiBpZCArIDEsIG1pZCArIDEsIHIpOwogICAgICAgIHJldHVybiBnMSArIGcyOwogICAgfQp9OwoKc3RydWN0IEJJVCB7CiAgICB2bGwgYml0OwogICAgaW50IG47CiAgICBCSVQoKSB7fQogICAgQklUKGludCBfKSB7CiAgICAgICAgbiA9IF87CiAgICAgICAgYml0LmFzc2lnbihuICsgMiwgMCk7CiAgICB9CiAgICB2b2lkIHVwZGF0ZShpbnQgaSwgbGwgdmFsKSB7CiAgICAgICAgZm9yICg7IGkgPD0gbjsgaSArPSBpICYgLWkpIGJpdFtpXSArPSB2YWw7CiAgICB9CiAgICBsbCBnZXQoaW50IGkpIHsKICAgICAgICBsbCBhbnMgPSAwOwogICAgICAgIGZvciAoOyBpID4gMDsgaSAtPSBpICYgLWkpIGFucyArPSBiaXRbaV07CiAgICAgICAgcmV0dXJuIGFuczsKICAgIH0KICAgIGxsIGdldChpbnQgbCwgaW50IHIpIHtyZXR1cm4gZ2V0KHIpIC0gZ2V0KGwgLSAxKTt9Cn07CgpsbCBuLCBQOwpwbGwgYVttYXhOXTsKaW50IGlkW21heE5dOwoKYm9vbCBzc0hwKGludCBpLCBpbnQgaikgewogICAgcmV0dXJuIGFbaV0uZmkgPiBhW2pdLmZpOwp9Cgp2b2lkIFNvbHZlKCkgewogICAgRk9SIChpLCAxLCBuLCAxKSBpZFtpXSA9IGk7CiAgICBzb3J0KGlkICsgMSwgaWQgKyBuICsgMSwgc3NIcCk7Ci8vICAgIEZPUiAoaSwgMSwgbiwgMSkgY291dCA8PCBpIDw8ICIgIiA8PCBhW2lkW2ldXS5maSA8PCAiICIgPDwgYVtpZFtpXV0uc2UgPDwgIlxuIjsKICAgIFNlZ21lbnRUcmVlIFNUKG4pOwogICAgQklUIGJpdChuKTsKICAgIGxsIGFuc0hwID0gMCwgYW5zVCA9IElORjE4OyAvLyBjaG9uIGhwIG14IGtjaG9uIFQgbWluCgogICAgRk9SIChpLCAxLCBuLCAwKSB7CiAgICAgICAgaW50IGogPSBpOwogICAgICAgIHdoaWxlIChqIDw9IG4gJiYgYVtpZFtpXV0uZmkgPT0gYVtpZFtqXV0uZmkpIHsKICAgICAgICAgICAgU1QudXBkYXRlKGlkW2pdLCBhW2lkW2pdXS5zZSk7CiAgICAgICAgICAgIGJpdC51cGRhdGUoaWRbal0sIGFbaWRbal1dLmZpKTsKICAgICAgICAgICAgKytqOwogICAgICAgIH0KICAgICAgICBsbCB0bXBIcCA9IDAsIHRtcFQgPSBhW2lkW2pdXS5maTsKICAgICAgICBpZiAoaiA+IG4pIHRtcFQgPSAwOwoKICAgICAgICBsbCB2YWwgPSBQOwogICAgICAgIGludCBjdXIgPSBTVC53YWxrTWluKDEsIHZhbCk7CiAgICAgICAgd2hpbGUgKGN1ciAhPSAtMSkgewogICAgICAgICAgICBsbCB0bXBWYWwgPSBTVC5nZXQoMSwgY3VyIC0gMSkgKyB2YWw7CiAgICAgICAgICAgIGludCBueHQgPSBTVC53YWxrU3VtKHRtcFZhbCk7CiAgICAgICAgICAgIGlmIChueHQgPT0gLTEpIGJyZWFrOwoKICAgICAgICAgICAgdG1wSHAgKz0gYml0LmdldChjdXIsIG54dCk7CiAgICAgICAgICAgIHZhbCAtPSBTVC5nZXQoY3VyLCBueHQpOwogICAgICAgICAgICBpZiAobnh0ICsgMSA+IG4pIGJyZWFrOwogICAgICAgICAgICBjdXIgPSBTVC53YWxrTWluKG54dCArIDEsIHZhbCk7CiAgICAgICAgfQogICAgICAgIGlmIChhbnNIcCA8IHRtcEhwKSB7CiAgICAgICAgICAgIGFuc0hwID0gdG1wSHA7CiAgICAgICAgICAgIGFuc1QgPSB0bXBUOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChhbnNIcCA9PSB0bXBIcCkKICAgICAgICAgICAgYW5zVCA9IG1pbihhbnNULCB0bXBUKTsKLy8gICAgICAgIGlmIChhbnNIcCA9PSAxMzQ4NykgewovLyAgICAgICAgICAgIGludCB4ID0gMTsKLy8gICAgICAgIH0KICAgICAgICBpID0gajsKICAgIH0KICAgIGNvdXQgPDwgYW5zSHAgPDwgIiAiIDw8IGFuc1Q7Cn0KCnZvaWQgaW5wdXQoKSB7CiAgICBpbnQgVDsKICAgIGNpbiA+PiBUOwogICAgd2hpbGUgKFQtLSkgewogICAgICAgIGNpbiA+PiBuID4+IFA7CiAgICAgICAgRk9SIChpLCAxLCBuLCAxKSBjaW4gPj4gYVtpXS5maSA+PiBhW2ldLnNlOwogICAgICAgIFNvbHZlKCk7CiAgICAgICAgY291dCA8PCAiXG4iOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIG9wZW5GaWxlKCJGRVNUSVZBTCIpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnB1dCgpOwoKICAgIC8vYm9vbCBtZW1vcnkyOwogICAgLy9jZXJyIDw8ICJcblxuXG5UaW1lOiAiPDwgMTAwMC4wICogY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgbXMiOwogICAgLy9jZXJyIDw8ICJcblxuXG5NZW1vcnk6ICI8PCBhYnMoJm1lbW9yeTEgLSAmbWVtb3J5MikgKiAxLjAgLyBNQVNLKDIwKSA8PCIgTUIiOwoKICAgIHJldHVybiAwOwp9Cg==