/* ___
_______________| |_
/\ \
/ \ \
/____\__________________\
| | |
| | Date : 26/07/2025|
| | Author : pppssslc|
|____|__________________|
*/
#include<bits/stdc++.h>
using namespace std;
typedef string str;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> vll;
typedef map<int, int> mpii;
typedef map<ll, ll> mpll;
typedef set<int> si;
typedef set<ll> sl;
typedef complex<double> cd;
#define prio_que priority_queue
#define se second
#define fi first
#define For(i, l, r, x) for(int i = l; i <= r; i += x)
#define Ford(i, l, r, x) for(int i = l; i >= r; i -= x)
#define Fore(x, a) for(auto x: a)
#define pb push_back
#define ins insert
#define all(a) a.begin(), a.end()
#define phongdeptrainhatquadat main()
const ll inf = 1e18 + 1;
const int mod = 1e9 + 7;
const int maxn = 1e5 + 1;
const int offset = 5e4 + 1;
const db PI = acos(-1);
void fft(vector<cd> &a, bool inv){
int n = a.size();
if(n <= 1) return;
int j = 0;
For(i, 1, n, 1){
int bit = n >> 1;
for(; j&bit; bit >>= 1) j ^= bit;
j ^= bit;
if(i < j) swap(a[i], a[j]);
}
For(len, 2, n, len){
db ang = 2 * PI / len * (inv ? -1 : 1);
cd wlen(cos(ang), sin(ang));
For(i, 0, n - 1, len){
cd w(1);
For(j, 0, len / 2 - 1, 1){
cd u = a[i + j];
cd v = a[i + j + len / 2] * w;
a[i + j] = u + v;
a[i + j + len / 2] = u - v;
w *= wlen;
}
}
}
if(inv) for(cd &x: a) x /= n;
}
int phongdeptrainhatquadat{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n; cin >> n;
int maxA = 0, maxB = 0;
vi cntA(maxn, 0), cntB(maxn, 0);
For(i, 1, n, 1){
int v; cin >> v;
++cntA[v + offset], maxA = max(maxA, v);
}
For(i, 1, n, 1){
int v; cin >> v;
++cntB[v + offset], maxB = max(maxB, v);
}
int N = 1;
while(N <= 2 * maxn) N <<= 1;
vector<cd> polyA(N), polyB(N);
For(i, 0, maxn, 1) polyA[i] = cntA[i];
For(i, 0, maxn, 1) polyB[i] = cntB[i];
fft(polyA, false); fft(polyB, false);
vector<cd> polyR(N);
For(i, 0, N, 1) polyR[i] = polyA[i] * polyB[i];
fft(polyR, true);
vl cnt(N);
For(i, 0, N - 1, 1) cnt[i] = round(polyR[i].real());
ll res = 0;
For(i, 1, n, 1){
int v; cin >> v; int s = v + 2 * offset;
if(s < N) res += cnt[s];
}
cout << res;
return (0 ^ 0);
}
LyogICAgICAgICAgICAgICAgX19fCiAgIF9fX19fX19fX19fX19fX3wgfF8KICAvXCAgICAgICAgICAgICAgICAgIFwKIC8gIFwgICAgICAgICAgICAgICAgICBcCi9fX19fXF9fX19fX19fX19fX19fX19fX1wKfCAgICB8ICAgICAgICAgICAgICAgICAgfAp8ICAgIHwgRGF0ZSA6IDI2LzA3LzIwMjV8CnwgICAgfCBBdXRob3IgOiBwcHBzc3NsY3wKfF9fX198X19fX19fX19fX19fX19fX19ffAoqLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgc3RyaW5nIHN0cjsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsbDsKdHlwZWRlZiBkb3VibGUgZGI7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGRiOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiBwYWlyPGxsLCBsbD4gcGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHZlY3RvcjxsbD4gdmw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2aWk7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxsbD4+IHZsbDsKdHlwZWRlZiBtYXA8aW50LCBpbnQ+IG1waWk7CnR5cGVkZWYgbWFwPGxsLCBsbD4gbXBsbDsKdHlwZWRlZiBzZXQ8aW50PiBzaTsKdHlwZWRlZiBzZXQ8bGw+IHNsOwp0eXBlZGVmIGNvbXBsZXg8ZG91YmxlPiBjZDsKI2RlZmluZSBwcmlvX3F1ZSBwcmlvcml0eV9xdWV1ZQoKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIEZvcihpLCBsLCByLCB4KSBmb3IoaW50IGkgPSBsOyBpIDw9IHI7IGkgKz0geCkKI2RlZmluZSBGb3JkKGksIGwsIHIsIHgpIGZvcihpbnQgaSA9IGw7IGkgPj0gcjsgaSAtPSB4KQojZGVmaW5lIEZvcmUoeCwgYSkgZm9yKGF1dG8geDogYSkKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBpbnMgaW5zZXJ0CiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQoKI2RlZmluZSBwaG9uZ2RlcHRyYWluaGF0cXVhZGF0IG1haW4oKQoKY29uc3QgbGwgaW5mID0gMWUxOCArIDE7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgbWF4biA9IDFlNSArIDE7CmNvbnN0IGludCBvZmZzZXQgPSA1ZTQgKyAxOwpjb25zdCBkYiBQSSA9IGFjb3MoLTEpOwoKdm9pZCBmZnQodmVjdG9yPGNkPiAmYSwgYm9vbCBpbnYpewoJaW50IG4gPSBhLnNpemUoKTsKCWlmKG4gPD0gMSkgcmV0dXJuOwoJaW50IGogPSAwOwoJRm9yKGksIDEsIG4sIDEpewoJCWludCBiaXQgPSBuID4+IDE7CgkJZm9yKDsgaiZiaXQ7IGJpdCA+Pj0gMSkgaiBePSBiaXQ7CgkJaiBePSBiaXQ7CgkJaWYoaSA8IGopIHN3YXAoYVtpXSwgYVtqXSk7Cgl9CglGb3IobGVuLCAyLCBuLCBsZW4pewoJCWRiIGFuZyA9IDIgKiBQSSAvIGxlbiAqIChpbnYgPyAtMSA6IDEpOwoJCWNkIHdsZW4oY29zKGFuZyksIHNpbihhbmcpKTsKCQlGb3IoaSwgMCwgbiAtIDEsIGxlbil7CgkJCWNkIHcoMSk7CgkJCUZvcihqLCAwLCBsZW4gLyAyIC0gMSwgMSl7CgkJCQljZCB1ID0gYVtpICsgal07CgkJCQljZCB2ID0gYVtpICsgaiArIGxlbiAvIDJdICogdzsKCQkJCWFbaSArIGpdID0gdSArIHY7CgkJCQlhW2kgKyBqICsgbGVuIC8gMl0gPSB1IC0gdjsKCQkJCXcgKj0gd2xlbjsKCQkJfQoJCX0KCX0KCWlmKGludikgZm9yKGNkICZ4OiBhKSB4IC89IG47Cn0KCmludCBwaG9uZ2RlcHRyYWluaGF0cXVhZGF0ewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CgljaW4udGllKE5VTEwpOyBjb3V0LnRpZShOVUxMKTsKCWludCBuOyBjaW4gPj4gbjsKCWludCBtYXhBID0gMCwgbWF4QiA9IDA7Cgl2aSBjbnRBKG1heG4sIDApLCBjbnRCKG1heG4sIDApOwoJRm9yKGksIDEsIG4sIDEpewoJCWludCB2OyBjaW4gPj4gdjsKCQkrK2NudEFbdiArIG9mZnNldF0sIG1heEEgPSBtYXgobWF4QSwgdik7Cgl9CglGb3IoaSwgMSwgbiwgMSl7CgkJaW50IHY7IGNpbiA+PiB2OwoJCSsrY250Qlt2ICsgb2Zmc2V0XSwgbWF4QiA9IG1heChtYXhCLCB2KTsKCX0KCWludCBOID0gMTsKCXdoaWxlKE4gPD0gMiAqIG1heG4pIE4gPDw9IDE7Cgl2ZWN0b3I8Y2Q+IHBvbHlBKE4pLCBwb2x5QihOKTsKCUZvcihpLCAwLCBtYXhuLCAxKSBwb2x5QVtpXSA9IGNudEFbaV07CglGb3IoaSwgMCwgbWF4biwgMSkgcG9seUJbaV0gPSBjbnRCW2ldOwoJZmZ0KHBvbHlBLCBmYWxzZSk7IGZmdChwb2x5QiwgZmFsc2UpOwoJdmVjdG9yPGNkPiBwb2x5UihOKTsKCUZvcihpLCAwLCBOLCAxKSBwb2x5UltpXSA9IHBvbHlBW2ldICogcG9seUJbaV07CglmZnQocG9seVIsIHRydWUpOwoJdmwgY250KE4pOwoJRm9yKGksIDAsIE4gLSAxLCAxKSBjbnRbaV0gPSByb3VuZChwb2x5UltpXS5yZWFsKCkpOwoJbGwgcmVzID0gMDsKCUZvcihpLCAxLCBuLCAxKXsKCQlpbnQgdjsgY2luID4+IHY7IGludCBzID0gdiArIDIgKiBvZmZzZXQ7CgkJaWYocyA8IE4pIHJlcyArPSBjbnRbc107Cgl9Cgljb3V0IDw8IHJlczsKCXJldHVybiAoMCBeIDApOwp9