Problem:
Score : 400 points

Problem Statement

There are N one-off jobs available. If you take the i-th job and complete it, you will earn the reward of B_i after A_i days from the day you do it.

You can take and complete at most one of these jobs in a day.

However, you cannot retake a job that you have already done.

Find the maximum total reward that you can earn no later than M days from today.

You can already start working today.

Constraints

All values in input are integers.

1 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq A_i \leq 10^5

1 \leq B_i \leq 10^4

Input

Input is given from Standard Input in the following format:

N M
A_1 B_1
A_2 B_2
\vdots
A_N B_N

Output

Print the maximum total reward that you can earn no later than M days from today.

Sample Input 1

3 4
4 3
4 1
2 2

Sample Output 1

5

You can earn the total reward of 5 by taking the jobs as follows:

Take and complete the first job today. You will earn the reward of 3 after four days from today.

Take and complete the third job tomorrow. You will earn the reward of 2 after two days from tomorrow, that is, after three days from today.

Sample Input 2

5 3
1 2
1 3
1 4
2 1
2 3

Sample Output 2

10

Sample Input 3

1 1
2 1

Sample Output 3

0

Solution in Ruby (2.3.3) (judge verdict: Wrong Answer)


job_count,period = gets.split.map{|s|s.to_i}
jobs = (1..job_count)
.map{|n| gets.split.map{|s|s.to_i}}
.group_by{|e| e.first }
.each{|day,jobs| 
  jobs.map!{|e| e.last }
  jobs.sort!.reverse!
}

hash = Hash.new
jobs.keys.sort.each {|day| hash[day] = jobs[day] }
jobs = hash

require "pp"
PP.pp(jobs,STDERR)

pay = 0
1.upto(period) {|p|
  selected_jobs = Hash.new
  jobs.each {|days,pays|
    if days <= p 
      selected_jobs[days] = jobs[days] 
    else
      break
    end
  } # 該当する期間より短い仕事を抽出
  job = selected_jobs
  .map{|days,pays| [days,pays.first] } # 各支払期間の中で報酬が最大のものを選択
  .max{|job1,job2| job1.last <=> job2.last} # 報酬が最も多いものを選択

  if job
    pay += job.last
    jobs[job.first].delete(pay) # TODO バグ入り
    jobs.delete(job.first) if jobs[job.first] == []
  end
}

puts pay