#include <iostream>
#include <vector>
#include <algorithm>
struct Pihenohely {
int tav;
int haszon;
};
using Pihenohelyek = std::vector<Pihenohely>;
void beolvas(std::istream &be, Pihenohelyek &pihenok, int &k) {
int n;
be >> n >> k;
pihenok.resize(n);
for (auto &p: pihenok) {
be >> p.tav >> p.haszon;
}
}
std::vector<int> hatotavon_kivuliek_kiszamitasa(const Pihenohelyek &pihenok, int k) {
const auto n = static_cast<int>(pihenok.size());
std::vector<int> elso_hatotavon_kivuli(n);
int i = 0;
for (auto j = 0; j < n; j++) {
while (pihenok[j].tav - pihenok[i].tav >= k) {
i++;
}
elso_hatotavon_kivuli[j] = i - 1;
}
return elso_hatotavon_kivuli;
}
struct Elrendezes {
int haszon;
std::vector<int> kutak;
};
struct Reszmegoldas {
int haszon = -1;
bool telepitve = false;
};
using Dp = std::vector<Reszmegoldas>;
Elrendezes optimalis_elrendezes(const Dp &dp, const std::vector<int> &elso_hatotavon_kivuli) {
const auto n = elso_hatotavon_kivuli.size();
Elrendezes elrendezes;
elrendezes.haszon = dp[n].haszon;
int i = n - 1;
while (i != -1) {
if (dp[i + 1].telepitve) {
elrendezes.kutak.push_back(i);
i = elso_hatotavon_kivuli[i];
} else {
--i;
}
}
std::reverse(elrendezes.kutak.begin(), elrendezes.kutak.end());
return elrendezes;
}
Elrendezes kutak_dp_bottom_up(const Pihenohelyek &pihenok, int k) {
const auto n = static_cast<int>(pihenok.size());
const auto elso_hatotavon_kivuli = hatotavon_kivuliek_kiszamitasa(pihenok, k);
Dp dp(n + 1);
dp[0].haszon = 0;
for (int i = 0; i < n; i++) {
const auto telepit_haszon = dp[elso_hatotavon_kivuli[i] + 1].haszon + pihenok[i].haszon;
const auto nem_telepit_haszon = dp[i].haszon;
dp[i + 1] = { std::max(telepit_haszon, nem_telepit_haszon),
nem_telepit_haszon < telepit_haszon };
}
return optimalis_elrendezes(dp, elso_hatotavon_kivuli);
}
int main() {
using std::cout;
Pihenohelyek pihenok;
int k;
beolvas(std::cin, pihenok, k);
const auto opt_elrendezes = kutak_dp_bottom_up(pihenok, k);
cout << opt_elrendezes.haszon << '\n';
cout << opt_elrendezes.kutak.size();
for (const auto p_index: opt_elrendezes.kutak) {
cout << ' ' << p_index + 1;
}
cout << '\n';
return 0;
}