#include<cstdio>
#include<queue>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAXN=505;
const int MAXW=2e3+5;
struct node{
int t,w;
}a[MAXN];
int n;
int w;
double dp[MAXW];
double check(double mid)
{
for(int i=1;i<=MAXW-5;i++)
{
dp[i]=-0x3f3f3f3f;
}
dp[0]=0;
for(int i=1;i<=n;i++)
{
for(int j=MAXW-5;j>=a[i].w;j--)
{
dp[j]=max(dp[j],dp[j-a[i].w]+a[i].t-a[i].w*mid);
}
}
double res=-0x3f3f3f3f;
for(int i=w;i<=MAXW-5;i++)
{
res=max(res,dp[i]);
}
return res;
}
int main()
{
scanf("%d %d",&n,&w);
for(int i=1;i<=n;i++)
{
scanf("%d %d",&a[i].w,&a[i].t);
}
double l=0;
double r=1e9;
while(r-l>1e-9)
{
double mid=(l+r)/2;
if(check(mid)>=0)
{
l=mid;
}
else
{
r=mid;
}
}
printf("%d",int(l*1000));
}