#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vvvi; typedef vector vvvvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define all(v) (v).begin(), (v).end() void run() { ll n, k; cin >> n >> k; ll res = 0; vi A(k, 0); ll s = 0; for (ll i = 0; i < n; i++) { ll w; cin >> w; s += w; w %= k; if (w == 0) { res--; continue; } if (A[k-w] > 0) { A[k-w]--; res--; } else { A[w]++; } } res += s/k; vi B, C; for (ll i = 1; i < k; i++) { if (A[i] > 0) { B.pb(i); C.pb(A[i]); } } while (B.size() < 4) { B.pb(0); C.pb(0); } vvvvi T(C[0]+1, vvvi(C[1]+1, vvi(C[2]+1, vi(C[3]+1, 0)))); for (ll a = 0; a <= C[0]; a++) { for (ll b = 0; b <= C[1]; b++) { for (ll c = 0; c <= C[2]; c++) { for (ll d = 0; d <= C[3]; d++) { T[a][b][c][d] = -1; if (a > 0) { T[a][b][c][d] = max(T[a][b][c][d], T[a-1][b][c][d]); } if (b > 0) { T[a][b][c][d] = max(T[a][b][c][d], T[a][b-1][c][d]); } if (c > 0) { T[a][b][c][d] = max(T[a][b][c][d], T[a][b][c-1][d]); } if (d > 0) { T[a][b][c][d] = max(T[a][b][c][d], T[a][b][c][d-1]); } if ((a*B[0] + b*B[1] + c*B[2] + d*B[3])%k == 0) { T[a][b][c][d]++; } } } } } res -= T[C[0]][C[1]][C[2]][C[3]]; cout << res << endl; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); run(); return 0; }