10 5 1000000000
1 1 1 2 2 1 2 2 2 2
 5 3 3
1 2 2 1 1
 2 4 1
1 1
 1 1000000000 1000000000
100000
 5 3 2
1 1 2 1 1
 5 2 4
1 2 3 2 1
 1 10 10
1

10000000000
 0
 2
 0
 7
 0
 0

#include <bits/stdc++.h>
using namespace std;
void f(vector<int> &a, int k) {
  stack<pair<int, int> > s;
  s.push({a[0], 1});
  for (int i = 1; i < a.size(); i++) {
    if (!s.empty() && s.top().second >= k) {
      for (int j = 0; j < k; j++) {
        s.pop();
      }
    }
    if (!s.empty() && a[i] == s.top().first)
      s.push({a[i], s.top().second + 1});
    else
      s.push({a[i], 1});
  }
  a.clear();
  while (!s.empty()) {
    a.push_back(s.top().first);
    s.pop();
  }
  reverse(a.begin(), a.end());
}
int main() {
  int n, k, m;
  cin >> n >> k >> m;
  vector<int> a(n);
  for (int i = 0; i < n; i++) {
    cin >> a[i];
  }
  f(a, k);
  int SIZE = a.size();
  vector<int> A = a;
  int c = n - a.size(), nc = 0;
  int cc = 0;
  for (int i = 1; i < m; i++) {
    int s = a.size();
    for (int j = 0; j < SIZE; j++) {
      a.push_back(A[j]);
    }
    f(a, k);
    nc = s + SIZE - a.size();
    if (a.size() == 0) {
      cout << 0;
      return 0;
    }
    if (nc == c)
      cc++;
    else {
      c = nc;
      cc = 0;
    }
    if (cc == min(10, SIZE - 2)) {
      cout << a.size() + c * (m - 1 - i);
      break;
    }
  }
  return 0;
}
