#include using namespace std; typedef long long ll; const ll N = 2e5 + 3; ll INF = 1e18; template T gcd(T a, T b){ while(b){ ll c = b; b = a % b; a = c; } return a; } ll n, x[N], a[N], b[N]; ll mn[N]; bool multiply(ll &x, ll val, ll big){ ll curr = x, ans = 0; while(val){ if(curr > big) return false; if(val & 1) ans += curr; curr *= 2; val >>= 1; if(ans > big) return false; } x = ans; return true; } void input(string s){ freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } int main(){ ios::sync_with_stdio(false); cin.tie(NULL); INF += 7; input("alchemy"); ll t; cin >> t; while(t--){ cin >> n; for(ll i = 0; i < n; ++i) cin >> x[i]; for(ll i = 0; i < n; ++i) cin >> a[i] >> b[i]; ll g = 0; for(ll i = 0; i < n; ++i) g = gcd(g, x[i]); for(ll i = 0; i < n; ++i) x[i] /= g; bool ok = true; for(ll i = 0; i < n; ++i){ ll t = gcd(b[i], x[i]); mn[i] = b[i] / t; } ll m_sum = 0, m_total = 0; for(int i = 0; i < n; ++i){ m_sum += x[i]; m_total += a[i] * b[i]; } ll lcm = mn[0]; for(ll i = 1; i < n && lcm <= m_total / m_sum; ++i){ lcm = lcm / gcd(lcm, mn[i]); if(!multiply(lcm, mn[i], m_total / m_sum)){ ok = false; break; } } if(!ok || lcm > m_total / m_sum){ cout << "-1\n"; return 0; } ll ans = INF; for(ll i = 0; i < n; ++i) ans = min(ans, (ll)(a[i] / (x[i] * lcm / b[i]))); if(!ans){ cout << "-1\n"; continue; } ll sum = 0; for(int i = 0; i < n; ++i) sum += lcm * x[i]; cout << sum << " " << sum * ans << "\n"; } } /* 3 3 3 5 8 18 2 12 5 16 6 3 2 4 6 1 1 1 2 1 3 2 3 5 1 5 1 3 */