Problem:
Score : 300 points

Problem Statement

Hearing that energy drinks increase rating in those sites, Takahashi decides to buy up M cans of energy drinks.

There are N stores that sell energy drinks. In the i-th store, he can buy at most B_i cans of energy drinks for A_i yen (the currency of Japan) each.

What is the minimum amount of money with which he can buy M cans of energy drinks?

It is guaranteed that, in the given inputs, a sufficient amount of money can always buy M cans of energy drinks.

Constraints

All values in input are integers.

1 \leq N, M \leq 10^5

1 \leq A_i \leq 10^9

1 \leq B_i \leq 10^5

B_1 + ... + B_N \geq M

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 minimum amount of money with which Takahashi can buy M cans of energy drinks.

Sample Input 1

2 5
4 9
2 4

Sample Output 1

12

With 12 yen, we can buy one drink at the first store and four drinks at the second store, for the total of five drinks. However, we cannot buy 5 drinks with 11 yen or less.

Sample Input 2

4 30
6 18
2 5
3 10
7 9

Sample Output 2

130

Sample Input 3

1 100000
1000000000 100000

Sample Output 3

100000000000000

The output may not fit into a 32-bit integer type.

Solution in Ruby (2.3.3) (judge verdict: Runtime Error)

info=gets.chomp.split(" ").map(&:to_i)
ab=Array.new(info[0])
info[0].times do|i|
	ab[i]=gets.chomp.split(" ").map(&:to_i)
end
def mysort(_list,_n)
	for i in (0..(_n-2))
		indexmin=i
		for j in (i..(_n-1))
			if(_list[j][0]<_list[indexmin][0])
				indexmin=j
			end
		end
		w=_list[indexmin][0]
		_list[indexmin][0]=_list[i][0]
		_list[i][0]=w

		w=_list[indexmin][1]
		_list[indexmin][1]=_list[i][1]
		_list[i][1]=w
	end
	return _list
end
def mid(_num1,_num2,_num3)
	if(_num1<_num2)
		if(_num2<_num3)
			return _num2
		elsif(_num3<_num1)
			return _num1
		else
			return _num3
		end
	else
		if(_num1<_num3)
			return _num1
		elsif(_num1<_num2)
			return _num2
		else
			return _num3
		end
	end
end
def mysort2(_list,_beginnum,_endnum)
	if(_endnum-_beginnum<=1 || _beginnum>=_endnum)
		return _list
	end
	left=_beginnum
	right=_endnum
	mid_number=left+((right-left)/2)
	pivot=mid(_list[left][0],_list[mid_number][0],_list[right][0])
	while true
		while(_list[left][0]<pivot)
			left+=1
		end
		while(_list[right][0]>pivot)
			right-=1
		end
		if(left>=right)
			break
		end
		w=_list[left]
		_list[left]=_list[right]
		_list[right]=w
		left+=1
		right-=1
	end
	_list=mysort2(_list,_beginnum,left)
	_list=mysort2(_list,right,_endnum)
	return _list
end
if(info[0]<10)
	ab=mysort(ab,info[0])
else
	ab=mysort2(ab,0,info[0]-1)
end
result=0
info[0].times do|i|
	if(info[1]-ab[i][1]<=0)
		result+=(info[1]*ab[i][0])
		break
	else
		info[1]-=ab[i][1]
		result+=(ab[i][0]*ab[i][1])
	end
end
p result