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: Wrong Answer)


#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

#define llong long long
#define fr(i,l,r) for(i=(l);i<(r);i++)
#define min(p,q)((p)<(q)?(p):(q))

struct insert_t {
	int num;
	int kosu;
} ;

int compare_insert(const void *a, const void *b) {
  struct insert_t *A = (struct insert_t *)a;
  struct insert_t *B = (struct insert_t *)b;
  return A->num - B->num;
}



int main(void)
{
	//変数の宣言
	int n;
	//int k;
	struct insert_t insert[100010];
	
	//よく使う変数
	int i,j,k,l;
	int flag=0;
	int ans=0;
	llong int count=0;
	int temp,temp1,temp2;
	int max,min;
	int len;
	//データの読み込み
	
	scanf("%d %d",&n,&k);
	
	for(i=0;i<n;i++){
		scanf("%d %d",&insert[i].num,&insert[i].kosu);
	}
	
//	printf("nは%dです\n", n);
//	printf("データの読み込み終了\n");
	//実際の処理
	
	qsort(insert, n, sizeof(struct insert_t), compare_insert);
	
	for(i=0;i<n;i++){
		count=count+insert[i].kosu;
		if(count-k>=0){
			printf("%d",insert[i].num);
			return 0;
		}
	}
	
//	printf("計算部分終了\n");
	//出力
	
	printf("error");
	
//	printf("結果の出力終了\n");
	
	return 0;
	
}