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

import sys
from collections import deque
input=sys.stdin.readline
n,k,m=map(int,input().split())
a=list(map(int,input().split()))
r=a[0]
flag=0
for i in range(n):
  if r!=a[i]:
    flag=1
    break
if flag==0:
  print((m*n)%k)
  sys.exit()
if k>n:
  print(m*n)
  sys.exit()
curr=a[0]
tmp=1
que=deque([(a[0],1)])
for i in range(1,n):
  if a[i]==curr:
    tmp+=1
    que.append((a[i],tmp))
    if tmp==k:
      for j in range(k):
        que.pop()
      if que:
        tmp=que[-1][1]
        curr=que[-1][0]
      else:
        curr=-1
  else:
    tmp=1
    curr=a[i]
    que.append((a[i],tmp))
quecop=[]
for i in que:
  quecop.append(i[0])
leftrem=0
rightrem=0
if not que:
  print(0)
  sys.exit()
while que[0][0]==que[-1][0]:
  r=que[0][0]
  count1=0
  p=len(que)
  count2=p-1
  while count1<p and que[count1][0]==r:
    count1+=1
  if count1==p:
    break
  while count2>=0 and que[count2][0]==r:
    count2-=1
  if count1+p-1-count2<k:
    break
  leftrem+=count1
  rightrem+=k-count1
  
  for i in range(count1):
    que.popleft()
  for i in range(k-count1):
    que.pop()
if que:
  t=que[0][0]
flag=0
for i in que:
  if i[0]!=t:
    flag=1
    break
if flag:
  print(leftrem+rightrem+len(que)*m)
else:
  r=[]
  for i in range(leftrem):
    if r and r[-1][0]==quecop[i]:
      r[-1][1]+=1
    else:
      r.append([quecop[i],1])
  if r and r[-1][0]==que[0][0]:
    r[-1][0]=(r[-1][0]+(len(que)*m))%k
    if r[-1][1]==0:
      r.pop()
  else:
    if (len(que)*m)%k:
      r.append([que[0][0],(len(que)*m)%k])
  for i in range(len(quecop)-rightrem,len(quecop)):
    if r and r[-1][0]==quecop[i]:
      r[-1][1]+=1
      if r[-1][1]==k:
        r.pop()
    else:
      r.append([quecop[i],1])
  finans=0
  for i in r:
    finans+=i[1]
  print(finans)