#include <bits/stdc++.h>
using namespace std;

#define d(x) cerr << #x ":" << x << endl;
#define dd(x, y) cerr << "(" #x "," #y "):(" << x << "," << y << ")" << endl
#define rep(i, n) for (int i = (int)(0); i < (int)(n); i++)
#define all(v) v.begin(), v.end()
#define dump(v)                  \
    cerr << #v ":[ ";            \
    for (auto macro_vi : v) {    \
        cerr << macro_vi << " "; \
    }                            \
    cerr << "]" << endl;
#define ddump(v)                           \
    cerr << #v ":" << endl;                \
    for (auto macro_row : v) {             \
        cerr << "[";                       \
        for (auto macro__vi : macro_row) { \
            cerr << macro__vi << " ";      \
        }                                  \
        cerr << "]" << endl;               \
    }
using lint       = long long;
const int INF    = 1e9;
const lint LINF  = 1e18;
const double EPS = 1e-10;

int main() {
    lint N, V;
    cin >> N >> V;
    vector<lint> A(N), B(N), C(N), D(N);
    rep(i, N) cin >> A[i];
    rep(i, N) cin >> B[i];
    rep(i, N) cin >> C[i];
    rep(i, N) cin >> D[i];

    vector<lint> E(0);
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            E.push_back(A[i] + B[j]);
        }
    }

    map<lint, lint> mp;
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            mp[C[i] + D[j]]++;
        }
    }

    // dump(E);

    lint ans = 0;
    for (int i = 0; i < E.size(); i++) {
        lint F = V - E[i];
        ans += mp[F];
    }
    cout << ans << endl;

    return 0;
}
