#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 (ll i = (a); i <= (b); i += (x))
#define ROF(i, a, b, x) for (ll 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 stVal, stWei, stMin;
int n;
SegmentTree() {}
SegmentTree(int _) {
n = _;
stVal.assign(4 * n + 7, 0);
stWei.assign(4 * n + 7, 0);
stMin.assign(4 * n + 7, 0);
}
void update(int u, pll &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;}
}
tie(stVal[id], stWei[id]) = v;
stMin[id] = stWei[id];
while (id /= 2) {
stVal[id] = stVal[2 * id] + stVal[2 * id + 1];
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, int ty) {return get(u, v, ty, 1, 1, n);}
ll get(int u, int v, int ty, int id, int l, int r) {
if (r < u || v < l || u > v) return 0;
if (u <= l && r <= v) {
if (ty == 0) return stVal[id];
else return stWei[id];
}
int mid = (l + r) >> 1;
ll g1 = get(u, v, ty, 2 * id, l, mid);
ll g2 = get(u, v, ty, 2 * id + 1, mid + 1, r);
return g1 + g2;
}
};
ll n, P;
pll a[maxN];
int id[maxN];
SegmentTree ST;
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";
ST = SegmentTree(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]]);
++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, 1) + val;
int nxt = ST.walkSum(tmpVal);
if (nxt == -1) break;
tmpHp += ST.get(cur, nxt, 0);
val -= ST.get(cur, nxt, 1);
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+IHZsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aWk7CgojZGVmaW5lIG9wZW5GaWxlKG5hbWUpIGZyZW9wZW4oKG5hbWUgIi5pbnAiKSwgInIiLCBzdGRpbiksIGZyZW9wZW4oKG5hbWUgIi5vdXQiKSwgInciLCBzdGRvdXQpCiNkZWZpbmUgRk9SKGksIGEsIGIsIHgpIGZvciAobGwgaSA9IChhKTsgaSA8PSAoYik7IGkgKz0gKHgpKQojZGVmaW5lIFJPRihpLCBhLCBiLCB4KSBmb3IgKGxsIGkgPSAoYSk7IGkgPj0gKGIpOyBpICs9ICh4KSkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIE1BU0soeCkgKDFMTCA8PCAoeCkpCiNkZWZpbmUgZ2V0Qml0KG1hc2ssIGkpICgoKG1hc2spID4+IChpKSkgJiAxKQojZGVmaW5lIEJpdE9uKG1hc2spIChfX2J1aWx0aW5fcG9wY291bnRsbChtYXNrKSkKCmNvbnN0IGludCBtYXhOID0gMmU1ICsgNTsKLy9jb25zdCBsbCBtYXhCaXQgPSBNQVNLKDgpICsgMjsKY29uc3QgbGwgTE9HID0gMjA7CmNvbnN0IGxsIElORjE4ID0gMWUxODsKY29uc3QgaW50IElORjkgPSAxZTk7Ci8vY29uc3QgbGwgSU5GM2YgPSAweDNmM2YzZjNmM2YzZjNmM2Y7CmNvbnN0IGxsIE1PRCA9IDFlOSArIDc7CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8vLy8vLy8vLy8vLy8vbmhhbjAxMjM0NTYvLy8vLy8vLy8vLy8vLy8vLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKc3RydWN0IFNlZ21lbnRUcmVlIHsKICAgIHZsbCBzdFZhbCwgc3RXZWksIHN0TWluOwogICAgaW50IG47CiAgICBTZWdtZW50VHJlZSgpIHt9CiAgICBTZWdtZW50VHJlZShpbnQgXykgewogICAgICAgIG4gPSBfOwogICAgICAgIHN0VmFsLmFzc2lnbig0ICogbiArIDcsIDApOwogICAgICAgIHN0V2VpLmFzc2lnbig0ICogbiArIDcsIDApOwogICAgICAgIHN0TWluLmFzc2lnbig0ICogbiArIDcsIDApOwogICAgfQogICAgdm9pZCB1cGRhdGUoaW50IHUsIHBsbCAmdikgewogICAgICAgIGludCBpZCA9IDEsIGwgPSAxLCByID0gbjsKICAgICAgICB3aGlsZSAobCA8IHIpIHsKICAgICAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICAgICAgaWYgKHUgPiBtaWQpIHtpZCA9IDIgKiBpZCArIDE7IGwgPSBtaWQgKyAxO30KICAgICAgICAgICAgZWxzZSB7aWQgPSAyICogaWQ7IHIgPSBtaWQ7fQogICAgICAgIH0KICAgICAgICB0aWUoc3RWYWxbaWRdLCBzdFdlaVtpZF0pID0gdjsKICAgICAgICBzdE1pbltpZF0gPSBzdFdlaVtpZF07CgogICAgICAgIHdoaWxlIChpZCAvPSAyKSB7CiAgICAgICAgICAgIHN0VmFsW2lkXSA9IHN0VmFsWzIgKiBpZF0gKyBzdFZhbFsyICogaWQgKyAxXTsKICAgICAgICAgICAgc3RXZWlbaWRdID0gc3RXZWlbMiAqIGlkXSArIHN0V2VpWzIgKiBpZCArIDFdOwogICAgICAgICAgICBzdE1pbltpZF0gPSBtaW4oc3RNaW5bMiAqIGlkXSwgc3RNaW5bMiAqIGlkICsgMV0pOwogICAgICAgIH0KICAgIH0KICAgIC8vIHRpbSB2aSB0cmkgaSB4YSAxIG5oYXQgc2FvIGNobyAxLi5pIDw9IHZhbAogICAgaW50IHdhbGtTdW0obGwgdmFsKSB7cmV0dXJuIHdhbGtTdW0odmFsLCAxLCAxLCBuKTt9CiAgICBpbnQgd2Fsa1N1bShsbCB2YWwsIGludCBpZCwgaW50IGwsIGludCByKSB7CiAgICAgICAgaWYgKGwgPT0gcikgcmV0dXJuIHN0V2VpW2lkXSA8PSB2YWwgPyBsIDogLTE7CgogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgaWYgKHN0V2VpWzIgKiBpZF0gPiB2YWwpIHJldHVybiB3YWxrU3VtKHZhbCwgMiAqIGlkLCBsLCBtaWQpOwogICAgICAgIGludCB0ID0gd2Fsa1N1bSh2YWwgLSBzdFdlaVsyICogaWRdLCAyICogaWQgKyAxLCBtaWQgKyAxLCByKTsKICAgICAgICBpZiAodCAhPSAtMSkgcmV0dXJuIHQ7CiAgICAgICAgcmV0dXJuIHdhbGtTdW0odmFsLCAyICogaWQsIGwsIG1pZCk7CiAgICB9CiAgICAvLyB0aW0gdmkgdHJpIGkgZ2FuIDEgbmhhdCBzYW8gY2hvIGFpIDw9IHZhbAogICAgaW50IHdhbGtNaW4oaW50IEwsIGxsIHZhbCkge3JldHVybiB3YWxrTWluKEwsIHZhbCwgMSwgMSwgbik7fQogICAgaW50IHdhbGtNaW4oaW50IEwsIGxsIHZhbCwgaW50IGlkLCBpbnQgbCwgaW50IHIpIHsKICAgICAgICBpZiAoc3RNaW5baWRdID4gdmFsKSByZXR1cm4gLTE7CiAgICAgICAgaWYgKHIgPCBMKSByZXR1cm4gLTE7CiAgICAgICAgaWYgKGwgPT0gcikgcmV0dXJuIHN0TWluW2lkXSA8PSB2YWwgPyBsIDogLTE7CgogICAgICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgaW50IHQgPSB3YWxrTWluKEwsIHZhbCwgMiAqIGlkLCBsLCBtaWQpOwogICAgICAgIGlmICh0ICE9IC0xKSByZXR1cm4gdDsKICAgICAgICByZXR1cm4gd2Fsa01pbihMLCB2YWwsIDIgKiBpZCArIDEsIG1pZCArIDEsIHIpOwogICAgfQogICAgbGwgZ2V0KGludCB1LCBpbnQgdiwgaW50IHR5KSB7cmV0dXJuIGdldCh1LCB2LCB0eSwgMSwgMSwgbik7fQogICAgbGwgZ2V0KGludCB1LCBpbnQgdiwgaW50IHR5LCBpbnQgaWQsIGludCBsLCBpbnQgcikgewogICAgICAgIGlmIChyIDwgdSB8fCB2IDwgbCB8fCB1ID4gdikgcmV0dXJuIDA7CiAgICAgICAgaWYgKHUgPD0gbCAmJiByIDw9IHYpIHsKICAgICAgICAgICAgaWYgKHR5ID09IDApIHJldHVybiBzdFZhbFtpZF07CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIHN0V2VpW2lkXTsKICAgICAgICB9CiAgICAgICAgaW50IG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICBsbCBnMSA9IGdldCh1LCB2LCB0eSwgMiAqIGlkLCBsLCBtaWQpOwogICAgICAgIGxsIGcyID0gZ2V0KHUsIHYsIHR5LCAyICogaWQgKyAxLCBtaWQgKyAxLCByKTsKICAgICAgICByZXR1cm4gZzEgKyBnMjsKICAgIH0KfTsKCmxsIG4sIFA7CnBsbCBhW21heE5dOwppbnQgaWRbbWF4Tl07ClNlZ21lbnRUcmVlIFNUOwoKYm9vbCBzc0hwKGludCBpLCBpbnQgaikgewogICAgcmV0dXJuIGFbaV0uZmkgPiBhW2pdLmZpOwp9Cgp2b2lkIFNvbHZlKCkgewogICAgRk9SIChpLCAxLCBuLCAxKSBpZFtpXSA9IGk7CiAgICBzb3J0KGlkICsgMSwgaWQgKyBuICsgMSwgc3NIcCk7Ci8vICAgIEZPUiAoaSwgMSwgbiwgMSkgY291dCA8PCBpIDw8ICIgIiA8PCBhW2lkW2ldXS5maSA8PCAiICIgPDwgYVtpZFtpXV0uc2UgPDwgIlxuIjsKICAgIFNUID0gU2VnbWVudFRyZWUobik7CiAgICBsbCBhbnNIcCA9IDAsIGFuc1QgPSBJTkYxODsgLy8gY2hvbiBocCBteCBrY2hvbiBUIG1pbgoKICAgIEZPUiAoaSwgMSwgbiwgMCkgewogICAgICAgIGludCBqID0gaTsKICAgICAgICB3aGlsZSAoaiA8PSBuICYmIGFbaWRbaV1dLmZpID09IGFbaWRbal1dLmZpKSB7CiAgICAgICAgICAgIFNULnVwZGF0ZShpZFtqXSwgYVtpZFtqXV0pOwogICAgICAgICAgICArK2o7CiAgICAgICAgfQogICAgICAgIGxsIHRtcEhwID0gMCwgdG1wVCA9IGFbaWRbal1dLmZpOwogICAgICAgIGlmIChqID4gbikgdG1wVCA9IDA7CgogICAgICAgIGxsIHZhbCA9IFA7CiAgICAgICAgaW50IGN1ciA9IFNULndhbGtNaW4oMSwgdmFsKTsKICAgICAgICB3aGlsZSAoY3VyICE9IC0xKSB7CiAgICAgICAgICAgIGxsIHRtcFZhbCA9IFNULmdldCgxLCBjdXIgLSAxLCAxKSArIHZhbDsKICAgICAgICAgICAgaW50IG54dCA9IFNULndhbGtTdW0odG1wVmFsKTsKICAgICAgICAgICAgaWYgKG54dCA9PSAtMSkgYnJlYWs7CgogICAgICAgICAgICB0bXBIcCArPSBTVC5nZXQoY3VyLCBueHQsIDApOwogICAgICAgICAgICB2YWwgLT0gU1QuZ2V0KGN1ciwgbnh0LCAxKTsKICAgICAgICAgICAgaWYgKG54dCArIDEgPiBuKSBicmVhazsKICAgICAgICAgICAgY3VyID0gU1Qud2Fsa01pbihueHQgKyAxLCB2YWwpOwogICAgICAgIH0KICAgICAgICBpZiAoYW5zSHAgPCB0bXBIcCkgewogICAgICAgICAgICBhbnNIcCA9IHRtcEhwOwogICAgICAgICAgICBhbnNUID0gdG1wVDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoYW5zSHAgPT0gdG1wSHApCiAgICAgICAgICAgIGFuc1QgPSBtaW4oYW5zVCwgdG1wVCk7Ci8vICAgICAgICBpZiAoYW5zSHAgPT0gMTM0ODcpIHsKLy8gICAgICAgICAgICBpbnQgeCA9IDE7Ci8vICAgICAgICB9CiAgICAgICAgaSA9IGo7CiAgICB9CiAgICBjb3V0IDw8IGFuc0hwIDw8ICIgIiA8PCBhbnNUOwp9Cgp2b2lkIGlucHV0KCkgewogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBjaW4gPj4gbiA+PiBQOwogICAgICAgIEZPUiAoaSwgMSwgbiwgMSkgY2luID4+IGFbaV0uZmkgPj4gYVtpXS5zZTsKICAgICAgICBTb2x2ZSgpOwogICAgICAgIGNvdXQgPDwgIlxuIjsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBvcGVuRmlsZSgiRkVTVElWQUwiKTsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgaW5wdXQoKTsKCiAgICAvL2Jvb2wgbWVtb3J5MjsKICAgIC8vY2VyciA8PCAiXG5cblxuVGltZTogIjw8IDEwMDAuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAiIG1zIjsKICAgIC8vY2VyciA8PCAiXG5cblxuTWVtb3J5OiAiPDwgYWJzKCZtZW1vcnkxIC0gJm1lbW9yeTIpICogMS4wIC8gTUFTSygyMCkgPDwiIE1CIjsKCiAgICByZXR1cm4gMDsKfQo=