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 java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
import javafx.util.*;

 
public class Solution {
     static int visited[];
    static void DFS(int u,ArrayList<Integer> p,ArrayList l[]){
        p.add(u);
        visited[u]=1;
        for(int i=0;i<l[u].size();i++){
            if(visited[(Integer)l[u].get(i)]==0){
                DFS((Integer)l[u].get(i),p,l);
            }
        }
        return ;
    }
    public static void main(String[] args)  {
       Scanner sc=new Scanner (System.in);
       int n,k,m;
        n=sc.nextInt();
        k=sc.nextInt();
        m=sc.nextInt();
        int A[]=new int[n];
        for(int i=0;i<n;i++){
            A[i]=sc.nextInt();
        }
        Stack<Pair<Integer,Integer>> s=new Stack();
        for(int i=0;i<n;i++){
            if(s.size()==0){
                s.push(new Pair(A[i],1));
            }
            else{
                Pair<Integer,Integer> p=s.peek();
                if(p.getKey()==A[i]){
                   // System.out.println("hello");
                    if(p.getValue()+1==k){
                        for(int j=0;j<k-1;j++){
                            s.pop();
                        }
                    }
                    else{
                        s.push(new Pair(A[i],p.getValue()+1));
                    }
                }
                else{
                    s.push(new Pair(A[i],1));
                }
            }
        }
        ArrayList<Integer> l=new ArrayList();
        int d=s.size();
   // System.out.println(d);
        for(int i=0;i<d;i++){
             Pair<Integer,Integer> p=s.peek();
            l.add(p.getKey());
            s.pop();
        }
        ArrayList<Integer> l2=new ArrayList();
        for(int i=l.size()-1;i>=0;i--){
            l2.add(l.get(i));
        }
      d=l2.size();
          //System.out.println(l2.toString());
        int i=0;
        int j=d-1;
        int len=d;
        if(len==0) {
            System.out.println(0);
            return ;
        }
        if(k>d){
            int a=l2.get(0);
            int flag=0;
            for(int g=1;g<d;g++){
                if(l2.get(g)!=a){
                    flag=1;
                }
            }
            if(flag==0){
                long x=(long)d*m;
                System.out.println(x%k);
            }
            else{
                 long x=(long)d*m;
                System.out.println(x);
            }
            return ;
        }
        while(i<j){
            int count=0;
            if(k%2==0){
            while(l2.get(i)==l2.get(j) && i<j){
                count+=2;
                i++;
                j--;
                if(count==k){
                    len=len-k;
                    break;
                }
            }
            if(count!=k){
                long x=(long)m*len;
                System.out.println(x+2*i);
                return ;
            }
            }
            else{
                while(l2.get(i)==l2.get(j) && i<j){
                    count+=2;
                    i++;
                    j--;
                    if(count==k-1){
                        if(l2.get(i)==l2.get(i-1)){
                            len=len-k;
                            j++;
                        }
                        else if(l2.get(j)==l2.get(j+1)){
                            len=len-k;
                            i--;
                        }
                        else{
                            long x=(long)m*len;
                            System.out.println(x+2*i);
                return ;
                        }
                    }
                }
               
            }
        }
         System.out.println(0);
    }
    
}
