答案一定是连续的
所以二分得到上下界就好了
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define N 220000
typedef __int64 LL;
using namespace std;
LL l,r,mid,ans;
int n,c,a[N],b[N],i;
LL check(LL mid){
LL res=0;
for(int i=1;i<=n;++i){
if(a[i]!=0 && mid/b[i]>c/a[i])return 1e10;
res+=mid*a[i]/b[i];
}
return res;
}
int main(){
while(scanf("%d%d",&n,&c)!=EOF){
c-=n;LL sum=0;
for(i=1;i<=n;++i){
scanf("%d%d",&a[i],&b[i]);sum+=a[i];
}
if(sum==0){
if(c==0)printf("-1\n");
else printf("0\n");
continue;
}
l=1; r=1e18;
while(l<=r){
mid=l+r>>1;
if(check(mid)>=c)r=mid-1;
else l=mid+1;
}
ans=-(r+1);
l=1; r=1e18;
while(l<=r){
mid=l+r>>1;
if(check(mid)<=c)l=mid+1;
else r=mid-1;
}
ans+=(l-1);
printf("%I64d\n",ans+1);
}
}