#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e6+10;
const int INF=1e6;
int w[maxn],v[maxn],n,k;
double y[maxn]; //v-x*w
//判断是否满足条件
bool C(double x){
for(int i=0;i<n;i++){
y[i]=v[i]-x*w[i];
}
sort(y,y+n);
//计算y数组中从小到大前k个数的和
double sum=0;
for(int i=0;i<k;i++){
sum+=y[n-i-1];
}
return sum>=0;
}
void solve(){
double lb=0,ub=INF;
for(int i=0;i<100;i++){
double mid=(lb+ub)/2;
if(C(mid)) lb=mid;
else ub=mid;
}
printf("%.2f\n",ub);
}
int main(){
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++){
scanf("%d",&w[i]);
}
for(int i=0;i<n;i++){
scanf("%d",&v[i]);
}
solve();
return 0;
}
/*
Input:
3
2
2 5 2
2 3 1
Output:
0.75
*/