#include <bits/stdc++.h>
using namespace std;
long long N, K, A[1509], B[1509], C[1509], D[1509];
long long X[2250009];
int main() {
cin >> N >> K;
for (int i = 1; i <= N; i++) cin >> A[i];
for (int i = 1; i <= N; i++) cin >> B[i];
for (int i = 1; i <= N; i++) cin >> C[i];
for (int i = 1; i <= N; i++) cin >> D[i];
// ステップ 1: A[i] + B[j] を X に記録し、小さい順にソートする
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
X[(i - 1) * N + (j - 1)] = A[i] + B[j];
}
}
sort(X, X + N * N);
// ステップ 2: k, l を決め打ちする
long long Answer = 0;
for (int k = 1; k <= N; k++) {
for (int l = 1; l <= N; l++) {
long long border = K - C[k] - D[l];
int pos1 = lower_bound(X, X + N * N, border + 1) - X;
Answer += (long long)pos1;
}
}
cout << Answer << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpsb25nIGxvbmcgTiwgSywgQVsxNTA5XSwgQlsxNTA5XSwgQ1sxNTA5XSwgRFsxNTA5XTsKbG9uZyBsb25nIFhbMjI1MDAwOV07CgppbnQgbWFpbigpIHsKCWNpbiA+PiBOID4+IEs7Cglmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspIGNpbiA+PiBBW2ldOwoJZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKSBjaW4gPj4gQltpXTsKCWZvciAoaW50IGkgPSAxOyBpIDw9IE47IGkrKykgY2luID4+IENbaV07Cglmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspIGNpbiA+PiBEW2ldOwoJCgkvLyDjgrnjg4bjg4Pjg5cgMTogQVtpXSArIEJbal0g44KSIFgg44Gr6KiY6Yyy44GX44CB5bCP44GV44GE6aCG44Gr44K944O844OI44GZ44KLCglmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspIHsKCQlmb3IgKGludCBqID0gMTsgaiA8PSBOOyBqKyspIHsKCQkJWFsoaSAtIDEpICogTiArIChqIC0gMSldID0gQVtpXSArIEJbal07CgkJfQoJfQoJc29ydChYLCBYICsgTiAqIE4pOwoJCgkvLyDjgrnjg4bjg4Pjg5cgMjogaywgbCDjgpLmsbrjgoHmiZPjgaHjgZnjgosKCWxvbmcgbG9uZyBBbnN3ZXIgPSAwOwoJZm9yIChpbnQgayA9IDE7IGsgPD0gTjsgaysrKSB7CgkJZm9yIChpbnQgbCA9IDE7IGwgPD0gTjsgbCsrKSB7CgkJCWxvbmcgbG9uZyBib3JkZXIgPSBLIC0gQ1trXSAtIERbbF07CgkJCWludCBwb3MxID0gbG93ZXJfYm91bmQoWCwgWCArIE4gKiBOLCBib3JkZXIgKyAxKSAtIFg7CgkJCUFuc3dlciArPSAobG9uZyBsb25nKXBvczE7CgkJfQoJfQoJCgljb3V0IDw8IEFuc3dlciA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=