/*__ _(_) __ _ ___ ___ _ _ __| | __ _ _ _| |_ ___
/ _` | |/ _` |/ _ \/ __| | | |/ _` |/ _` | | | | __/ _ \
| (_| | | (_| | (_) \__ \ |_| | (_| | (_| | |_| | || (_) |
\__, |_|\__,_|\___/|___/\__,_|\__,_|\__,_|\__,_|\__\___/
|___/ Accepted Code */
#include <bits/stdc++.h>
using namespace std;
#ifndef M_PI
#define M_PI 3.141592653589793238462643
#endif
const long maxPow=18;
const long absMax=1<<(maxPow-2);
long _cnt[2][2*absMax+1];
#define Cnt(i,x) _cnt[i][x+absMax]
template<typename T>
void readNumber(T& x){
register int c;
static bool isNega;
isNega=false;
while(!((x=getchar())>='-' && x<='9'));
if(x=='-') isNega=true, x=0; else x-='0';
while(((c=getchar())>='-' && c<='9')) x=10*x+(c-'0');
if(isNega) x=-x;
}
template<unsigned M, unsigned N, unsigned B, unsigned A>
struct SinCosSeries {
static double value() {
return 1-(A*M_PI/B)*(A*M_PI/B)/M/(M+1)
*SinCosSeries<M+2,N,B,A>::value();
}
};
template<unsigned N, unsigned B, unsigned A>
struct SinCosSeries<N,N,B,A> {
static double value() { return 1.; }
};
template<unsigned B, unsigned A, typename T=double>
struct Sin;
template<unsigned B, unsigned A>
struct Sin<B,A,float> {
static float value() {
return (A*M_PI/B)*SinCosSeries<2,24,B,A>::value();
}
};
template<unsigned B, unsigned A>
struct Sin<B,A,double> {
static double value() {
return (A*M_PI/B)*SinCosSeries<2,34,B,A>::value();
}
};
////// template class Cos
// compile-time calculation of cos(A*M_PI/B) function
template<unsigned B, unsigned A, typename T=double>
struct Cos;
template<unsigned B, unsigned A>
struct Cos<B,A,float> {
static float value() {
return SinCosSeries<1,23,B,A>::value();
}
};
template<unsigned B, unsigned A>
struct Cos<B,A,double> {
static double value() {
return SinCosSeries<1,33,B,A>::value();
}
};
template<unsigned N, typename T=double>
class DanielsonLanczos {
DanielsonLanczos<N/2,T> next;
public:
void apply(T* data,bool rev) {
next.apply(data,rev);
next.apply(data+N,rev);
T wtemp,tempr,tempi,wr,wi,wpr,wpi;
wtemp = -Sin<N,1,T>::value();
wpr = -2.0*wtemp*wtemp;
wpi = -Sin<N,2,T>::value();
wr = 1.0;
wi = 0.0;
for (register unsigned i=0; i<N; i+=2) {
tempr = data[i+N]*wr - data[i+N+1]*wi;
tempi = data[i+N]*wi + data[i+N+1]*wr;
data[i+N] = data[i]-tempr;
data[i+N+1] = data[i+1]-tempi;
data[i] += tempr;
data[i+1] += tempi;
wtemp = wr;
wr += wr*wpr - wi*wpi;
wi += wi*wpr + wtemp*wpi;
}
}
};
template<typename T>
class DanielsonLanczos<1,T> {
public:
void apply(T* data, bool rev) { }
};
template<unsigned P,
typename T=double>
class GFFT {
enum { N = 1<<P };
DanielsonLanczos<N,T> recursion;
public:
inline void scramble(T* data, unsigned long nn){
register unsigned long n, j, i, m;
n = nn<<1;
j=1;
for (i=1; i<n; i+=2) {
if (j>i) {
swap(data[j-1], data[i-1]);
swap(data[j], data[i]);
}
m = nn;
while (m>=2 && j>m) {
j -= m;
m >>= 1;
}
j += m;
};
}
void fft(T* data, bool rev) {
scramble(data,N);
recursion.apply(data, rev);
}
};
template<typename T>
inline void ComplexMulti(T* r, T* p1, T* p2, unsigned long nn){
unsigned long n=nn<<1;
for(register unsigned long i=0;i<n;i+=2){
r[i]=p1[i]*p2[i]-p1[i+1]*p2[i+1],
r[i+1]=p1[i]*p2[i+1]+p1[i+1]*p2[i];
}
}
enum {pmaxPow=1<<(maxPow)};
GFFT<maxPow,double> fftC;
long N;
double A[1<<(maxPow+1)];
double B[1<<(maxPow+1)];
double AB[1<<(maxPow+1)];
long C[1<<(maxPow)];
int main(){
readNumber(N);
register long i,j,x;
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
for(i=0;i<N;i++) readNumber(x),A[(x+absMax)<<1]+=1.;
for(i=0;i<N;i++) readNumber(x),B[(x+absMax)<<1]+=1.;
for(i=0;i<N;i++) readNumber(x),C[(x+absMax)]++;
fftC.fft(A,false);fftC.fft(B,false);
ComplexMulti(AB,A,B,pmaxPow);
fftC.fft(AB,true);
for(i=0;i<(1<<(maxPow+1));i+=2) AB[i]/=pmaxPow;
const long zzz=1<<(maxPow+1);
register long long res=0;
for(i=0+2*absMax,j=-absMax+absMax;j<=2*absMax;i+=2,j++)
if(fabs(C[j])>1e-8) res+=1ll*(long)(AB[zzz-i]+.5f)*C[j];
if(res>13000000000ll) exit(-1);
printf("%lld\n",res);
return 0;
}
LypfXyBfKF8pIF9fIF8gIF9fXyAgX19fIF8gICBfICBfX3wgfCBfXyBfIF8gICBffCB8XyBfX18KIC8gX2AgfCB8LyBfYCB8LyBfIFwvIF9ffCB8IHwgfC8gX2AgfC8gX2AgfCB8IHwgfCBfXy8gXyBcCnwgKF98IHwgfCAoX3wgfCAoXykgXF9fIFwgfF98IHwgKF98IHwgKF98IHwgfF98IHwgfHwgKF8pIHwKIFxfXywgfF98XF9fLF98XF9fXy98X19fL1xfXyxffFxfXyxffFxfXyxffFxfXyxffFxfX1xfX18vCiB8X19fLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRlZCBDb2RlICAqLwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNpZm5kZWYgTV9QSQogICAgI2RlZmluZSBNX1BJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzCiNlbmRpZgoKY29uc3QgbG9uZyBtYXhQb3c9MTg7CmNvbnN0IGxvbmcgYWJzTWF4PTE8PChtYXhQb3ctMik7CmxvbmcgX2NudFsyXVsyKmFic01heCsxXTsKI2RlZmluZSBDbnQoaSx4KSBfY250W2ldW3grYWJzTWF4XQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCByZWFkTnVtYmVyKFQmIHgpewogICAgcmVnaXN0ZXIgaW50IGM7CiAgICBzdGF0aWMgYm9vbCBpc05lZ2E7CiAgICBpc05lZ2E9ZmFsc2U7CiAgICB3aGlsZSghKCh4PWdldGNoYXIoKSk+PSctJyAmJiB4PD0nOScpKTsKICAgIGlmKHg9PSctJykgaXNOZWdhPXRydWUsIHg9MDsgZWxzZSB4LT0nMCc7CiAgICB3aGlsZSgoKGM9Z2V0Y2hhcigpKT49Jy0nICYmIGM8PSc5JykpIHg9MTAqeCsoYy0nMCcpOwogICAgaWYoaXNOZWdhKSB4PS14Owp9Cgp0ZW1wbGF0ZTx1bnNpZ25lZCBNLCB1bnNpZ25lZCBOLCB1bnNpZ25lZCBCLCB1bnNpZ25lZCBBPgpzdHJ1Y3QgU2luQ29zU2VyaWVzIHsKICAgc3RhdGljIGRvdWJsZSB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIDEtKEEqTV9QSS9CKSooQSpNX1BJL0IpL00vKE0rMSkKICAgICAgICAgICAgICAgKlNpbkNvc1NlcmllczxNKzIsTixCLEE+Ojp2YWx1ZSgpOwogICB9Cn07Cgp0ZW1wbGF0ZTx1bnNpZ25lZCBOLCB1bnNpZ25lZCBCLCB1bnNpZ25lZCBBPgpzdHJ1Y3QgU2luQ29zU2VyaWVzPE4sTixCLEE+IHsKICAgc3RhdGljIGRvdWJsZSB2YWx1ZSgpIHsgcmV0dXJuIDEuOyB9Cn07Cgp0ZW1wbGF0ZTx1bnNpZ25lZCBCLCB1bnNpZ25lZCBBLCB0eXBlbmFtZSBUPWRvdWJsZT4Kc3RydWN0IFNpbjsKCnRlbXBsYXRlPHVuc2lnbmVkIEIsIHVuc2lnbmVkIEE+CnN0cnVjdCBTaW48QixBLGZsb2F0PiB7CiAgIHN0YXRpYyBmbG9hdCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIChBKk1fUEkvQikqU2luQ29zU2VyaWVzPDIsMjQsQixBPjo6dmFsdWUoKTsKICAgfQp9Owp0ZW1wbGF0ZTx1bnNpZ25lZCBCLCB1bnNpZ25lZCBBPgpzdHJ1Y3QgU2luPEIsQSxkb3VibGU+IHsKICAgc3RhdGljIGRvdWJsZSB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIChBKk1fUEkvQikqU2luQ29zU2VyaWVzPDIsMzQsQixBPjo6dmFsdWUoKTsKICAgfQp9OwoKLy8vLy8vIHRlbXBsYXRlIGNsYXNzIENvcwovLyBjb21waWxlLXRpbWUgY2FsY3VsYXRpb24gb2YgY29zKEEqTV9QSS9CKSBmdW5jdGlvbgoKdGVtcGxhdGU8dW5zaWduZWQgQiwgdW5zaWduZWQgQSwgdHlwZW5hbWUgVD1kb3VibGU+CnN0cnVjdCBDb3M7Cgp0ZW1wbGF0ZTx1bnNpZ25lZCBCLCB1bnNpZ25lZCBBPgpzdHJ1Y3QgQ29zPEIsQSxmbG9hdD4gewogICBzdGF0aWMgZmxvYXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiBTaW5Db3NTZXJpZXM8MSwyMyxCLEE+Ojp2YWx1ZSgpOwogICB9Cn07CnRlbXBsYXRlPHVuc2lnbmVkIEIsIHVuc2lnbmVkIEE+CnN0cnVjdCBDb3M8QixBLGRvdWJsZT4gewogICBzdGF0aWMgZG91YmxlIHZhbHVlKCkgewogICAgICByZXR1cm4gU2luQ29zU2VyaWVzPDEsMzMsQixBPjo6dmFsdWUoKTsKICAgfQp9OwoKdGVtcGxhdGU8dW5zaWduZWQgTiwgdHlwZW5hbWUgVD1kb3VibGU+CmNsYXNzIERhbmllbHNvbkxhbmN6b3MgewogICBEYW5pZWxzb25MYW5jem9zPE4vMixUPiBuZXh0OwpwdWJsaWM6CiAgIHZvaWQgYXBwbHkoVCogZGF0YSxib29sIHJldikgewogICAgICBuZXh0LmFwcGx5KGRhdGEscmV2KTsKICAgICAgbmV4dC5hcHBseShkYXRhK04scmV2KTsKCiAgICAgIFQgd3RlbXAsdGVtcHIsdGVtcGksd3Isd2ksd3ByLHdwaTsKICAgICAgd3RlbXAgPSAtU2luPE4sMSxUPjo6dmFsdWUoKTsKICAgICAgd3ByID0gLTIuMCp3dGVtcCp3dGVtcDsKICAgICAgd3BpID0gLVNpbjxOLDIsVD46OnZhbHVlKCk7CiAgICAgIHdyID0gMS4wOwogICAgICB3aSA9IDAuMDsKICAgICAgZm9yIChyZWdpc3RlciB1bnNpZ25lZCBpPTA7IGk8TjsgaSs9MikgewogICAgICAgIHRlbXByID0gZGF0YVtpK05dKndyIC0gZGF0YVtpK04rMV0qd2k7CiAgICAgICAgdGVtcGkgPSBkYXRhW2krTl0qd2kgKyBkYXRhW2krTisxXSp3cjsKICAgICAgICBkYXRhW2krTl0gPSBkYXRhW2ldLXRlbXByOwogICAgICAgIGRhdGFbaStOKzFdID0gZGF0YVtpKzFdLXRlbXBpOwogICAgICAgIGRhdGFbaV0gKz0gdGVtcHI7CiAgICAgICAgZGF0YVtpKzFdICs9IHRlbXBpOwoKICAgICAgICB3dGVtcCA9IHdyOwogICAgICAgIHdyICs9IHdyKndwciAtIHdpKndwaTsKICAgICAgICB3aSArPSB3aSp3cHIgKyB3dGVtcCp3cGk7CiAgICAgIH0KICAgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgRGFuaWVsc29uTGFuY3pvczwxLFQ+IHsKcHVibGljOgogICB2b2lkIGFwcGx5KFQqIGRhdGEsIGJvb2wgcmV2KSB7IH0KfTsKCnRlbXBsYXRlPHVuc2lnbmVkIFAsCiAgICAgICAgIHR5cGVuYW1lIFQ9ZG91YmxlPgpjbGFzcyBHRkZUIHsKICAgZW51bSB7IE4gPSAxPDxQIH07CiAgIERhbmllbHNvbkxhbmN6b3M8TixUPiByZWN1cnNpb247CnB1YmxpYzoKICAgIGlubGluZSB2b2lkIHNjcmFtYmxlKFQqIGRhdGEsIHVuc2lnbmVkIGxvbmcgbm4pewogICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbiwgaiwgaSwgbTsKICAgICAgICBuID0gbm48PDE7CiAgICAgICAgaj0xOwogICAgICAgIGZvciAoaT0xOyBpPG47IGkrPTIpIHsKICAgICAgICAgICAgaWYgKGo+aSkgewogICAgICAgICAgICAgICAgc3dhcChkYXRhW2otMV0sIGRhdGFbaS0xXSk7CiAgICAgICAgICAgICAgICBzd2FwKGRhdGFbal0sIGRhdGFbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG0gPSBubjsKICAgICAgICAgICAgd2hpbGUgKG0+PTIgJiYgaj5tKSB7CiAgICAgICAgICAgICAgICBqIC09IG07CiAgICAgICAgICAgICAgICBtID4+PSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGogKz0gbTsKICAgICAgICB9OwogICAgfQogICAgdm9pZCBmZnQoVCogZGF0YSwgYm9vbCByZXYpIHsKICAgICAgc2NyYW1ibGUoZGF0YSxOKTsKICAgICAgcmVjdXJzaW9uLmFwcGx5KGRhdGEsIHJldik7CiAgICB9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgppbmxpbmUgdm9pZCBDb21wbGV4TXVsdGkoVCogciwgVCogcDEsIFQqIHAyLCB1bnNpZ25lZCBsb25nIG5uKXsKICAgIHVuc2lnbmVkIGxvbmcgbj1ubjw8MTsKICAgIGZvcihyZWdpc3RlciB1bnNpZ25lZCBsb25nIGk9MDtpPG47aSs9Mil7CiAgICAgICAgcltpXT1wMVtpXSpwMltpXS1wMVtpKzFdKnAyW2krMV0sCiAgICAgICAgcltpKzFdPXAxW2ldKnAyW2krMV0rcDFbaSsxXSpwMltpXTsKICAgIH0KfQoKZW51bSB7cG1heFBvdz0xPDwobWF4UG93KX07CkdGRlQ8bWF4UG93LGRvdWJsZT4gZmZ0QzsKbG9uZyBOOwpkb3VibGUgQVsxPDwobWF4UG93KzEpXTsKZG91YmxlIEJbMTw8KG1heFBvdysxKV07CmRvdWJsZSBBQlsxPDwobWF4UG93KzEpXTsKbG9uZyBDWzE8PChtYXhQb3cpXTsKaW50IG1haW4oKXsKICAgIHJlYWROdW1iZXIoTik7CiAgICByZWdpc3RlciBsb25nIGksaix4OwogICAgbWVtc2V0KEEsMCxzaXplb2YoQSkpOwogICAgbWVtc2V0KEIsMCxzaXplb2YoQikpOwogICAgZm9yKGk9MDtpPE47aSsrKSByZWFkTnVtYmVyKHgpLEFbKHgrYWJzTWF4KTw8MV0rPTEuOwogICAgZm9yKGk9MDtpPE47aSsrKSByZWFkTnVtYmVyKHgpLEJbKHgrYWJzTWF4KTw8MV0rPTEuOwogICAgZm9yKGk9MDtpPE47aSsrKSByZWFkTnVtYmVyKHgpLENbKHgrYWJzTWF4KV0rKzsKICAgIGZmdEMuZmZ0KEEsZmFsc2UpO2ZmdEMuZmZ0KEIsZmFsc2UpOwogICAgQ29tcGxleE11bHRpKEFCLEEsQixwbWF4UG93KTsKICAgIGZmdEMuZmZ0KEFCLHRydWUpOwogICAgZm9yKGk9MDtpPCgxPDwobWF4UG93KzEpKTtpKz0yKSBBQltpXS89cG1heFBvdzsKICAgIGNvbnN0IGxvbmcgenp6PTE8PChtYXhQb3crMSk7CiAgICByZWdpc3RlciBsb25nIGxvbmcgcmVzPTA7CiAgICBmb3IoaT0wKzIqYWJzTWF4LGo9LWFic01heCthYnNNYXg7ajw9MiphYnNNYXg7aSs9MixqKyspCiAgICAgICAgaWYoZmFicyhDW2pdKT4xZS04KSByZXMrPTFsbCoobG9uZykoQUJbenp6LWldKy41ZikqQ1tqXTsKICAgICAgIGlmKHJlcz4xMzAwMDAwMDAwMGxsKSBleGl0KC0xKTsKICAgIHByaW50ZigiJWxsZFxuIixyZXMpOwogICAgcmV0dXJuIDA7Cn0K