#include <bits/stdc++.h>
using namespace std;
#ifdef DEBUG
ifstream in_file("minta/be2.txt");
#define input in_file
#define INTHENAMEOFGOD
#else
#define input cin
#define INTHENAMEOFGOD \
ios::sync_with_stdio(0); \
cin.tie(0); \
cout.tie(0);
#endif
typedef long long ll;
typedef vector<ll> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef pair<ll, ll> pii;
struct megoldas {
ll ertek;
vi kutak;
};
ll N, K;
vi d, H;
vector<megoldas> opt;
int main() {
input >> N >> K;
d.resize(N);
H.resize(N);
input >> d[0] >> H[0];
opt.push_back((megoldas) {
.ertek = H[0],
.kutak = {0},
});
for (ll n = 1; n < N; n++) {
input >> d[n] >> H[n];
if (d[n] - K < d[0]) {
auto elozo = opt.back();
if (H[n] > elozo.ertek) {
opt.push_back((megoldas) {
.ertek = H[n],
.kutak = {n},
});
} else {
opt.push_back(opt.back());
}
continue;
}
ll i = lower_bound(d.begin()+1, d.begin()+n, d[n]-K) - d.begin();
if (d[i] > d[n]-K) {
i--;
}
assert(i >= 0);
assert(d[i] <= d[n]-K);
if (opt[i].ertek + H[n] > opt.back().ertek) {
opt.push_back((megoldas) {
.ertek = opt[i].ertek + H[n],
.kutak = opt[i].kutak,
}),
opt.back().kutak.push_back(n);
} else {
opt.push_back(opt.back());
}
}
cout << opt.back().ertek << "\n" << opt.back().kutak.size() << " ";
for (ll kut : opt.back().kutak) {
cout << kut+1 << " ";
}
cout << endl;
}