- /*__ _(_) __ _  ___  ___ _   _  __| | __ _ _   _| |_ ___ 
-  / _` | |/ _` |/ _ \/ __| | | |/ _` |/ _` | | | | __/ _ \ 
- | (_| | | (_| | (_) \__ \ |_| | (_| | (_| | |_| | || (_) | 
-  \__, |_|\__,_|\___/|___/\__,_|\__,_|\__,_|\__,_|\__\___/ 
-  |___/                                  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