#include<bits/stdc++.h>
#define inr long long
using namespace std;
#define ls id<<1
#define rs ls|1
#define mid (l+r>>1)
inline int read(){
int num=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))num=(num<<1)+(num<<3)+(ch&15),ch=getchar();
return num;
}
inline long long Max(const long long &x,const long long &y){return x<y?y:x;}
long long a[200020],b[200020],life[200020],damage[200020];
inline bool cmp(long long &x,long long &y){return life[x]-damage[x]>life[y]-damage[y];}
signed main(){
int n=read(),A=read(),B=read();
for(int i=1;i<=n;++i)life[i]=read(),damage[i]=read(),a[i]=i;
sort(a+1,a+1+n,cmp); long long ans=0,now,cnt=0; bool flag=1;
for(int i=1;i<=n;++i){
b[a[i]]=i,ans+=damage[a[i]];
if(cnt<B&&life[a[i]]>damage[a[i]])ans+=life[a[i]]-damage[a[i]],++cnt;
}
now=ans;
long long lift=(1<<A);
if(B!=0)for(int i=1;i<=n;++i){
long long get=lift*life[i]-damage[i];
if(b[i]<=cnt)ans=Max(ans,now+get-life[i]+damage[i]);
else if(cnt==B)ans=Max(ans,get+now-life[b[cnt]]+damage[b[cnt]]);
else ans=Max(ans,get+now);
}
printf("%lld",ans);
return 0;
}