#include <bits/stdc++.h>
using namespace std;
#define task "orderfrac"
int n;
double eps = 1e-12;
long long a[100002] = {}, b[100002] = {};
bool check(double mid, long long x)
{
    unsigned long long res = 0;
    long long bs = lower_bound(a, a + n, ceil(double(b[n - 1]) * mid)) - a;
    res += bs;
    for (int i = n - 2; i >= 0; i--)
    {
        while (a[bs] < (b[i] * 1.0 * mid) && bs < n)
            bs++;
        res += bs;
    }
    return (res < x);
}
void solve(long long x)
{
    double l = 0.0, r = 1e7, mid;
    for (int i = 0; i < 500 && l + eps < r; ++i)
    {
        mid = 0.5 * (l + r);
        if (check(mid, x))
            l = mid;
        else
            r = mid;
    }
    // cout<<r<<" "<<x<<'\n';
    double div = 1e8, ans1 = 0.0, ans2 = 0.0;
    for (int i = 0; i < n; i++)
    {
        int t = lower_bound(a, a + n, ceil(l * double(b[i]))) - a;
        if (a[t] != 0 && b[i] != 0 && (double(a[t])) < div * double(b[i]))
        {
            div = double(a[t]) / double(b[i]);
            ans1 = a[t];
            ans2 = b[i];
        }
    }
    // cout<<ans1<<" "<<ans2<<'\n';
    long long t1 = ans1, t2 = ans2, gg = __gcd(t1, t2);
    t1 /= gg;
    t2 /= gg;
    cout << t1 << " " << t2 << '\n';
}
int main()
{
    if (fopen(task ".inp", "r"))
    {
        freopen(task ".inp", "r", stdin);
        freopen(task ".out", "w", stdout);
    }
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int q;
    cin >> n >> q;
    for (int i = 0; i < n; i++)
        cin >> a[i];
    sort(a, a + n, less<long long>());
    for (int i = 0; i < n; i++)
        cin >> b[i];
    sort(b, b + n, greater<long long>());
    while (q--)
    {
        long long x;
        cin >> x;
        solve(x);
    }
}