//一开始我是想dfs的方法,结果错了。
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdio>
using namespace std;
priority_queue<pair<int,int> > a,b;
pair<int,int> p,q;
int n,c,f,num2;
bool solve(int num1){
if(num1 == n&&num2 <= f){
for(int i = 1;i<=n/2;++i)
b.pop();
cout<<b.top().first<<endl;
return true;
}
while(a.size() + num1>= n){
if(num2 + a.top().second <= f){
q = a.top();
b.push(a.top());
num2 += a.top().second;
a.pop();
if(solve(++num1))
return true;
b.pop();
num2 -= a.top().second;
a.push(q);
}
a.pop();
}
return false;
}
int main(){
scanf("%d%d%d",&n,&c,&f);
for(int i = 0;i<c;++i){
scanf("%d%d",&p.first,&p.second);
a.push(p);
}
num2 = 0;
if(!solve(0))
cout<<"-1\n";
return 0;
}
//真确的
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<cstdio>
using namespace std;
struct p{
int x;
int y;
int left;
int right;
}e[100000+5];
bool cmp(p a,p b){
return a.x < b.x;
}
int n,c,f;
int main(){
memset(e,0,sizeof(e));
scanf("%d%d%d",&n,&c,&f);
priority_queue<int> q;
for(int i = 1;i<=c;++i)
scanf("%d%d",&e[i].x,&e[i].y);
sort(e+1,e+1+c,cmp);
int p,t,sum = 0;
for(int i = 1;i<=n/2;++i){
p = e[i].y;
q.push(p);
sum += p;
}
for(int i=n/2+1;i<=c-n/2;i++)
{
e[i].left=sum; //比这个学生低分的n/2个学生的助学金最小和。
p=q.top();
t=e[i].y;
if(t<p){
q.pop();
q.push(t);
sum=sum-p+t;
}
}
while(q.size()) q.pop();
sum = 0;
for(int i = c;i >= c - n/2 + 1;--i){
p = e[i].y;
q.push(p);
sum += p;
}
for(int i=c-n/2;i>=n/2+1;i--)
{
e[i].right=sum; //比这个学生高分的n/2个学生的助学金最小和。
p=q.top();
t=e[i].y;
if(t<p){
q.pop();
q.push(t);
sum=sum-p+t;
}
}
int ans = 0;
for(int i = c-n/2;i>=n/2+1;--i){
if(e[i].left + e[i].y + e[i].right <= f){
ans = e[i].x;
break;
}
}
if(ans)
cout<<ans<<endl;
else
cout<<"-1\n";
return 0;
}