#include <bits/stdc++.h>
using namespace std;
struct SegTree {
int n = 0;
vector<int> mx, lazy, cnt;
explicit SegTree(int n_ = 0) { init(n_); }
void init(int n_) {
n = n_;
mx.assign(4 * n, 0);
lazy.assign(4 * n, 0);
cnt.assign(4 * n, 0);
if (n > 0) build(1, 0, n - 1);
}
void build(int node, int l, int r) {
if (l == r) {
cnt[node] = 1;
return;
}
int mid = (l + r) >> 1;
build(node << 1, l, mid);
build(node << 1 | 1, mid + 1, r);
pull(node);
}
void apply(int node, int v) {
mx[node] += v;
lazy[node] += v;
}
void push(int node) {
if (lazy[node] == 0) return;
apply(node << 1, lazy[node]);
apply(node << 1 | 1, lazy[node]);
lazy[node] = 0;
}
void pull(int node) {
int left = node << 1;
int right = node << 1 | 1;
mx[node] = max(mx[left], mx[right]);
cnt[node] = 0;
if (mx[left] == mx[node]) cnt[node] += cnt[left];
if (mx[right] == mx[node]) cnt[node] += cnt[right];
}
void add(int ql, int qr, int v) { add(1, 0, n - 1, ql, qr, v); }
void add(int node, int l, int r, int ql, int qr, int v) {
if (ql > r || qr < l) return;
if (ql <= l && r <= qr) {
apply(node, v);
return;
}
push(node);
int mid = (l + r) >> 1;
add(node << 1, l, mid, ql, qr, v);
add(node << 1 | 1, mid + 1, r, ql, qr, v);
pull(node);
}
int max_value() const { return mx[1]; }
int max_count() const { return cnt[1]; }
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<int> p(n), q(n);
for (int &x : p) cin >> x;
for (int &x : q) cin >> x;
int m = n - k + 1;
vector<int> pp(n + 1), pq(n + 1);
for (int i = 0; i < n; i++) pp[p[i]] = i;
for (int i = 0; i < n; i++) pq[q[i]] = i;
struct Event {
int l, r, delta;
};
vector<vector<Event>> e(m + 1);
auto f = [&](int pos) -> pair<int, int> {
int l = max(0, pos - k + 1);
int r = min(m - 1, pos);
return {l, r};
};
for (int x = 1; x <= n; x++) {
auto [lx, rx] = f(pp[x]);
auto [ly, ry] = f(pq[x]);
e[lx].push_back({ly, ry, +1});
if (rx + 1 <= m - 1) e[rx + 1].push_back({ly, ry, -1});
}
SegTree seg(m);
int best = -1;
int ways = 0;
for (int sx = 0; sx < m; sx++) {
for (const auto &e : e[sx]) seg.add(e.l, e.r, e.delta);
int cur = seg.max_value();
int cnt = seg.max_count();
if (cur > best) {
best = cur;
ways = cnt;
} else if (cur == best) {
ways += cnt;
}
}
cout << best << ' ' << ways;
}