private int findKth(int A[], int m, int B[], int n, int k) {
            if (m == 0) {
                return B[k - 1];
            }
            if (n == 0) {
                return A[k - 1];
            }
            if (m + n == k) {
                return Math.max(A[m - 1], B[n - 1]);
            }
            if (m > n) {
                return findKth(B, n, A, m, k);
            }
            int x = Math.min(m, k / 2 + 1);
            int y = k + 1 - x;
            if (A[x - 1] < B[y - 1]) {
                return findKth(A, m, B, y - 1, k);
            } else if (A[x - 1] > B[y - 1]) {
                return findKth(A, x - 1, B, n, k);
            } else {
                return A[x - 1];
            }
        }