#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <deque>
#include <cmath>
#include <climits>
#include <cstring>
#include <iomanip>
#include <numeric>
#include <functional>
#include <bitset>
#include <unordered_map>
#include <unordered_set>
#include <chrono>
#include <random>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
#define rep(a,b) for(int a = 0;a<b;a++)
#define st first
#define nd second
#define pb push_back
#define all(a) a.begin(),a.end()
const int inf = 1e9;
const ll infl = 1e18;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
vector<int> a(n);
vector<int> b(n);
rep(i, n){
cin >> a[i];
}
rep(i, n){
cin >> b[i];
}
vector<int> pref_wier(n);
vector<int> pref_kol(n);
unordered_map<int, int> zlicz;
rep(i, n){
if(i == 0){
pref_wier[i] = a[i];
zlicz[a[i]]++;
}
else{
pref_wier[i] = max(pref_wier[i-1], a[i]);
zlicz[a[i]]++;
}
}
rep(i, n){
if(i == 0){
pref_kol[i] = b[i];
}
else{
pref_kol[i] = max(pref_kol[i-1], b[i]);
zlicz[b[i]]++;
}
}
for(int i = 1; i < n; i++){
int poc = 1;
int kon = n-1;
int w = 0;
while(poc <= kon){
int sr = (poc+kon)/2;
if(pref_wier[sr] > a[i]){
kon = sr-1;
}
else{
poc = sr+1;
w = sr;
}
}
zlicz[a[i]] += w;
poc = 1;
kon = n-1;
w = 0;
while(poc <= kon){
int sr = (poc+kon)/2;
if(pref_kol[sr] > b[i]){
kon = sr-1;
}
else{
poc = sr+1;
w = sr;
}
}
zlicz[b[i]] += w;
}
int ile = 0;
int co = 0;
for(auto para : zlicz){
if(ile < para.nd){
co = para.st;
ile = para.nd;
}
}
cout << co << " " << ile << "\n";
return 0;
}