#pragma region header #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; struct Init{Init(){std::cin.tie(0); ios::sync_with_stdio(false); cout << setprecision(20) << fixed;}} init; using ll = long long; using ull = unsigned long long; using ld = long double; #define all(x) begin((x)), end((x)) #define pb push_back #define mp make_pair #define mt make_tuple #define uq(v) v.erase(unique(begin(v), end(v)), end(v)) template using pq = priority_queue; template using pq_g = priority_queue, greater>; template bool chmax(T &a, const T &b){if(a < b){a = b; return 1; } return 0;} template bool chmin(T &a, const T &b){if(a > b){a = b; return 1; } return 0;} constexpr ll INF = 2e18; constexpr int inf = 1e9; constexpr ld eps = 1e-15; constexpr int dx[8] = {1, 0, -1, 0, 1, 1, -1, -1}; constexpr int dy[8] = {0, 1 ,0, -1, 1, -1, 1, -1}; #pragma endregion header int main(){ int N, F; cin >> N >> F; int t = 1; queue q; q.push(0); vector cnt(N * F + 100, -1); vector A(N), B(N), C(N); for(int i = 0; i < N; ++i) cin >> A[i]; for(int i = 0; i < N; ++i) cin >> B[i]; for(int i = 0; i < N; ++i) cin >> C[i]; for(int i = 0; i < N; ++i){ for(;t--;){ int x = q.front(); q.pop(); if(cnt[x + A[i]] != i){ cnt[x + A[i]] = i; q.push(x + A[i]); } if(cnt[x + B[i]] != i){ cnt[x + B[i]] = i; q.push(x + B[i]); } if(cnt[x + C[i]] != i){ cnt[x + C[i]] = i; q.push(x + C[i]); } } t = (int)q.size(); cout << t << "\n"; } }