Problem:
Score : 300 points

Problem Statement

There is an empty array.
The following N operations will be performed to insert integers into the array.
In the i-th operation (1≤i≤N), b_i copies of an integer a_i are inserted into the array.
Find the K-th smallest integer in the array after the N operations.
For example, the 4-th smallest integer in the array \{1,2,2,3,3,3\} is 3.

Constraints

1≤N≤10^5

1≤a_i,b_i≤10^5

1≤K≤b_1…+…b_n

All input values are integers.

Input

Input is given from Standard Input in the following format:

N K
a_1 b_1
:
a_N b_N

Output

Print the K-th smallest integer in the array after the N operations.

Sample Input 1

3 4
1 1
2 2
3 3

Sample Output 1

3

The resulting array is the same as the one in the problem statement.

Sample Input 2

10 500000
1 100000
1 100000
1 100000
1 100000
1 100000
100000 100000
100000 100000
100000 100000
100000 100000
100000 100000

Sample Output 2

1

Solution in C (GCC 5.4.1) (judge verdict: Runtime Error)

#include<stdio.h>
#include<stdlib.h>
#define swap(type, x, y) do{type t = x; x = y; y = t;} while(0)

int main(void){
	int i, j, n, k;
	int *a, *b;
	int min;		//ソートのmin
	int y;			//b[i]の要素数を仮に保存する変数

	int *b_array;	//big array
	int total;		//big_arrayの要素数


	total = 0;
	scanf("%d %d", &n, &k);
	a = (int*)calloc(n, sizeof(int));
	b = (int*)calloc(n, sizeof(int));

	for(i=0; i< n; i++){
		scanf("%d %d", &a[i], &y);
		b[i] = y;
		total += y;
	}
	
	for(i=0; i<n - 1; i++){
		for(j = n - 1; j > i; j--){
			if(a[j-1] > a[j]){
				swap(int, a[j], a[j-1]);
				swap(int, b[j], b[j-1]);
			}
		}
	}

	printf("\n");
	

	int r = 0;
	b_array = (int*)calloc(total, sizeof(int));
	for(i=0; i<n; i++){
		for(j=0; j < b[i]; j++){
			b_array[r++] = a[i];
		}
	}

	printf("%d",b_array[k-1]);

	free(a);
	free(b);
	free(b_array);	
	printf("\n");
}