#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll INF=15e11;
const int maxn=105;
struct Node {
ll a,b,p,q;
void init() {
if(1.0*a/p<1.0*b/q) {
swap(a,b);
swap(p,q);
}
}
} pool[maxn];
ll n,x,ans;
bool check(ll tar) {
ll rmn=x;
for(ll i=1;i<=n;i++) {
ll tmp=INF;
for(ll j=0;j<pool[i].a;j++) {
ll num=(tar-j*pool[i].b)/pool[i].a;
if((tar-j*pool[i].b)%pool[i].a) {
num++;
}
ll cur=pool[i].p*num+pool[i].q*j;
tmp=min(tmp,cur);
}
if(rmn<tmp) {
return false;
} else {
rmn-=tmp;
}
}
return true;
}
int main() {
cin>>n>>x;
for(ll i=1;i<=n;i++) {
cin>>pool[i].a>>pool[i].p>>pool[i].b>>pool[i].q;
pool[i].init();
}
ll l=0,r=INF;
while(l<=r) {
ll mid=(l+r)/2;
if(check(mid)) {
ans=mid;
l=mid+1;
} else {
r=mid-1;
}
}
cout<<ans<<endl;
return 0;
}