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 (Clang 10.0.0) (judge verdict: Wrong Answer)

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

//int sort(int N, int *a, int *b) {
int sort(long long int N, long long int *a, long long int *b) {
	long long int neat;
	long long int i;
	long long int temp;
	while(neat < N - 1) {
		neat = 0;
		for(i = 0; i < N - 1; i += 1) {
			if(a[i] > a[i + 1]) {
				temp = a[i];
				a[i] = a[i + 1];
				a[i + 1] = temp;
				temp = b[i];
				b[i] = b[i + 1];
				b[i + 1] = temp;
			} else {
				neat += 1;
			}
		}
	}
	return 0;
}

int main(void) {
	int test = 0;
	//int N;
	long long int N;
	long long int K;
	//int *a, *b;
	long long int *a, *b;
	//int i;
	long long int i;
	long long int num_terms;
	char buf[128], *ch;
	FILE *file;

	if(test == 1) {
		file = fopen("input.txt", "r");
	}

	if(test == 1) {
		fgets(buf, sizeof(buf), file);
	} else {
		fgets(buf, sizeof(buf), stdin);
	}
	ch = strtok(buf, " ");
	//N = atoi(ch);
	N = atoll(ch);
	ch = strtok(NULL, " ");
	K = atoll(ch);

	//a = (int *)calloc(N, sizeof(int));
	a = (long long int *)calloc(N, sizeof(long long int));
	//b = (int *)calloc(N, sizeof(int));
	b = (long long int *)calloc(N, sizeof(long long int));

	if(test == 1) {
		for(i = 0; i < N; i += 1) {
			fgets(buf, sizeof(buf), file);
			ch = strtok(buf, " ");
			//a[i] = atoi(ch);
			a[i] = atoll(ch);
			ch = strtok(NULL, " ");
			//b[i] = atoi(ch);
			b[i] = atoll(ch);
		}
	} else {
		for(i = 0; i < N; i += 1) {
			fgets(buf, sizeof(buf), stdin);
			ch = strtok(buf, " ");
			//a[i] = atoi(ch);
			a[i] = atoll(ch);
			ch = strtok(NULL, " ");
			//b[i] = atoi(ch);
			b[i] = atoll(ch);
		}
	}
	sort(N, a, b);
	for(i = 0; i < N; i += 1) {
		//printf("%d %d\n", a[i], b[i]);
		printf("%lld %lld\n", a[i], b[i]);
	}

	num_terms = 0;
	for(i = 0; i < N; i += 1) {
		num_terms += b[i];
		if(num_terms >= K) {
			//printf("%d\n", a[i]);
			printf("%lld\n", a[i]);
			break;
		}
	}

	free(a);
	free(b);
	if(test == 1) {
		fclose(file);
	}
	return 0;
}