#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5, K = 101, P = 101, INF = 1e9;
int a[N], ans[K];
int n, k, p;
struct ST {
  int t[P * 4], leaf[P];
  int z = 0;
  void build(int v, int L, int R) {
    t[v] = INF;
    if (L == R) {
      leaf[L] = v;
    } else {
      int m = (L + R) >> 1;
      build(v * 2, L, m);
      build(v * 2 + 1, m + 1, R);
    }
  }
  void upd(int x, int y) {
    x = leaf[x];
    while (x > 0) {
      t[x] = min(t[x], y);
      x /= 2;
    }
  }
  int que(int l, int r, int v = 1, int L = 0, int R = p - 1) {
    if (l > r) return INF;
    if (l == L && r == R) return t[v];
    int m = (L + R) >> 1;
    return min(que(l, min(m, r), v * 2, L, m),
               que(max(m + 1, l), r, v * 2 + 1, m + 1, R));
  }
  void shift(int d) {
    z = z + p - d;
    if (z >= p) z -= p;
  }
  void relax(int x) { upd(z, x + z); }
  int getMin() {
    int x = que(0, z - 1), y = que(z, p - 1);
    return min(x + p - z, y - z);
  }
} t[K];
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k >> p;
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    a[i] %= p;
  }
  for (int i = 0; i <= k; i++) t[i].build(1, 0, p - 1);
  t[0].relax(0);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= k; j++) t[j].shift(a[i]);
    for (int j = k; j > 0; j--) {
      int val = t[j - 1].getMin();
      t[j].relax(val);
      ans[j] = val;
    }
  }
  cout << ans[k];
  return 0;
}
