regular binary search (need to be improved later on)
\tlong long lessEqual(const vector& A, const vector& B, double mid, long long cnt = 0){\n        for(long long x : A)\n            if(!x) cnt += (0 <= mid)*B.si
\tlong long lessEqual(const vector<int>& A, const vector<int>& B, double mid, long long cnt = 0){\n        for(long long x : A)\n            if(!x) cnt += (0 <= mid)*B.size();\n            else cnt += x>0 ? (upper_bound(B.begin(), B.end(), mid/x)-B.begin()) : (B.end()-lower_bound(B.begin(), B.end(), mid/x));\n        return cnt;\n    }\n    long long kthSmallestProduct(const vector<int>& A, const vector<int>& B, long long k, long long l = -1e10, long long r = 1e10) {\n        while(l<r){\n            long long mid = l+(r-l)/2;\n            lessEqual(A, B, mid) < k ? l = mid+1 : r = mid;\n        }\n        return l;\n    }
[]