#include<bits/stdc++.h>
using namespace std;
struct node{
int l;
int r;
int cj;
string l2;
}a[1500];
int n,c,b;
int cafa1[100000],cafa2[100000],cafa3[100000];
string cafa(string a,string b){
memset(cafa3,0,sizeof(cafa3));
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
for(int i=0;i<=a.size();i++) cafa1[i]=a[i]-'0';
for(int i=0;i<=b.size();i++) cafa2[i]=b[i]-'0';
int la=a.size()-1;
int lb=b.size()-1;
for(int i=0;i<=la;i++){
for(int j=0;j<=lb;j++){
cafa3[i+j]+=(cafa1[i]*cafa2[j]);
cafa3[i+j+1]+=cafa3[i+j]/10;
cafa3[i+j]%=10;
}
}
string s="";
int l=la+lb+1;
if(cafa3[l]==0) l--;
for(int i=l;i>=0;i--) s+=(cafa3[i]+'0');
return s;
}
int chfa1[100000],chfa2[100000];
string chfa(string a,long long b){
string ans="",ans2="";
int d=0;
if(a=="0") return 0;
for(int i=0;i<a.size();i++){
ans+=(d*10+a[i]-'0')/b+'0';
d=(d*10+(a[i]-'0'))%b;
}
bool flag=false;
for(int i=0;i<=a.size()-1;i++){
if(ans[i]!='0') flag=true;
if(flag) ans2+=ans[i];
}
return ans2;
}
bool maxx(string s1,string s2){
reverse(s1.begin(),s1.end());
reverse(s2.begin(),s2.end());
string s3=max(s1,s2);
return s3==s1;
}
bool cmp(node x,node y){
return x.cj<y.cj;
}
string str(int x){
string s="";
int o;
while(x!=0){
o=x%10;
x/=10;
s+=(o+'0');
}
reverse(s.begin(),s.end());
return s;
}
int main(){
cin>>n;
cin>>c>>b;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].r;
a[i].cj=a[i].l*a[i].r;
a[i].l2=str(a[i].l);
}
sort(a+1,a+1+n,cmp);
string hand="";
string cjj=str(c);
for(int i=1;i<=n;i++){
string xxxx=chfa(cjj,a[i].r);
if(!maxx(hand,xxxx)) hand=xxxx;
cjj=cafa(cjj,a[i].l2);
}
cout<<hand;
return 0;
}