#include <iostream>
#include <vector>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
using ll = long long;
vector<int> a, b;
map<pair<int, int>, ll> memo[3]; // memo[0]:win, memo[1]:lose, memo[2]:draw
ll dfs(int mask, int diff) {
int cnt = __builtin_popcount(mask);
if (cnt == a.size()) {
if (diff > 0) return 1; // win
else if (diff < 0) return 2; // lose
else return 3; // draw
}
ll res = 0;
for (int j = 0; j < b.size(); j++) {
if (mask >> j & 1) continue;
int new_diff = diff;
if (a[cnt] > b[j]) new_diff++;
else if (a[cnt] < b[j]) new_diff--;
res += dfs(mask | (1 << j), new_diff);
}
return res;
}
int main() {
int n;
cin >> n;
a.resize(n); b.resize(n);
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < n; i++) cin >> b[i];
// 这里用暴力验证
vector<int> p(n);
for (int i = 0; i < n; i++) p[i] = i;
ll win = 0, lose = 0, draw = 0;
do {
int dark = 0, yxl = 0;
for (int i = 0; i < n; i++) {
if (a[i] > b[p[i]]) dark++;
else if (a[i] < b[p[i]]) yxl++;
}
if (dark > yxl) win++;
else if (dark < yxl) lose++;
else draw++;
} while (next_permutation(p.begin(), p.end()));
cout << win << " " << lose << " " << draw << endl;
return 0;
}