#include <bits/stdc++.h>
using namespace std;
void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << ' ' << H;
  debug_out(T...);
}
const int INF = 1e9;
const long long MOD = 1e9 + 7;
const int MAXN = 5e5 + 5, MAXK = 1e2 + 5;
int n, k, p, A[MAXN], FEN[2][MAXK], DP[MAXK][MAXN];
void Add(bool b, int i, int x) {
  for (i++; i < MAXK; i += i & -i) FEN[b][i] = min(FEN[b][i], x);
}
int Get(bool b, int i) {
  int res = FEN[b][0];
  for (i++; i > 0; i -= i & -i) res = min(res, FEN[b][i]);
  return res;
}
void ResetFEN() {
  for (int i = 0; i < 2; i++) memset(FEN[i], 63, sizeof FEN[i]);
}
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int n, k, p;
  cin >> n >> k >> p;
  for (int i = 1; i <= n; i++) cin >> A[i], A[i] = (A[i - 1] + A[i]) % p;
  for (int i = 1; i <= n; i++) DP[1][i] = A[i];
  for (int j = 2; j <= k; j++) {
    ResetFEN();
    for (int i = 1; i <= n; i++) {
      int x = Get(0, A[i]), y = Get(1, p - A[i] - 1);
      DP[j][i] = min(x, y) + A[i];
      Add(0, A[i], DP[j - 1][i] - A[i]);
      Add(1, p - A[i], DP[j - 1][i] - A[i] + p);
    }
  }
  cout << DP[k][n] << '\n';
  return 0;
}
