#include<bits/stdc++.h>
using namespace std;
long long n,k,m,s=0;
long long p[1000005],c[100005];
struct qw {
long long fo,to;
} h[1010005];
long long len,w[105005];
void up(int p) {
while(p>1) {
if(h[p].fo<h[p/2].fo) {
swap(h[p].fo,h[p/2].fo);
p/=2;
} else break;
}
}
void ins(int x,int y) {
h[++len].fo=x;
h[len].to=y;
up(len);
}
void down(int p) {
long long l=p*2;
while(l<=len) {
if(l<len&&h[l].fo>h[l+1].fo)
l++;
if(h[l].fo<h[p].fo) {
swap(h[l],h[p]);
p=l;
l=p*2;
} else break;
}
}
int inf() {
long long re=h[1].fo;
h[1]=h[len--];
down(1);
return re;
}
void work() {
for(int i=1; i<=n; i++)
w[i]=inf();
}
int main() {
scanf("%lld%lld%lld",&n,&k,&m);
for(int i=1; i<=n; i++) {
scanf("%lld%lld",&p[i],&c[i]);
ins(c[i],p[i]);
}
work();
for(int i=1; i<=k; i++)
p[i]=w[i];
for(int i=1; i<=k; i++)
p[i]=min(p[i],w[i]);
sort(p+1,p+1+n);
for(int i=1; i<=n; i++) {
if(m>=p[i]) {
s++;
m-=p[i];
} else {
printf("%lld\n",s);
return 0;
}
}
printf("%lld\n",s);
return 0;
}