#include using namespace std; typedef pair P; struct node{ int t; int d; bool handle; }; set< P > locked; bool by_d(node a, node b){ return a.d > b.d; } int main(void){ int n,k; cin >> n >> k; --k; vector < node > task; for(int i = 0;i < n;++i){ int t,d; cin >> t >> d; node n = {t,d,true}; task.push_back(n); } sort(task.begin(),task.end(),by_d); for(int i = 0;i < (int)task.size();++i){ int t = task[i].t; set< P >::iterator lower = locked.lower_bound(P(t+1,0)); if(lower == locked.begin()){ locked.insert(P(t-k,t+k)); task[i].handle = false; } else{ --lower; if(!(lower->first <= t && t <= lower->second)){ locked.insert(P(t-k,t+k)); task[i].handle = false; } } } int res_max = 0; int res_sum = 0; for(int i = 0;i < (int)task.size();++i){ if(task[i].handle){ res_max = max(res_max, task[i].d); res_sum += task[i].d; } } cout << res_max << endl; cout << res_sum << endl; return 0; }