C++ || short code
\nclass Solution {\n    typedef long long ll;\n    #define all(a) begin(a), end(a)\npublic:\n    ll kthSmallestProduct(vector<int>& nums1, vector<int>& nums2, l
```\nclass Solution {\n    typedef long long ll;\n    #define all(a) begin(a), end(a)\npublic:\n    ll kthSmallestProduct(vector<int>& nums1, vector<int>& nums2, ll k) {\n        ll l = -1e10, r = 1e10;\n        ll ans;\n        while (l <= r) {\n            ll m = (l+r) / 2;\n            \n            ll cnt = 0;\n            for (int x : nums1) {\n                if (x == 0) cnt += (m >= 0) * size(nums2);\n                else if (x > 0) cnt += upper_bound(all(nums2), m / x - (m < 0 && m % x)) - begin(nums2);\n                else cnt += end(nums2) - lower_bound(all(nums2), m / x + (m < 0 && m % x));\n            }\n            if (cnt < k) l = m+1;\n            else ans = m, r = m-1;\n        }\n        return ans;\n    }\n};\n```
['Binary Search', 'C']