#include <stdio.h>

const int maxn = 1000000;

int x[200];
int a[maxn];
int best[2*maxn];
int koji[2*maxn];

void gen(int* x, int k, int* p, int n, int m) {            
      int i,j = 0;    
      for (i = 0; i < n; i++) {
          a[i] = x[j];
          printf("niz %d\n", a[i]);
          int s = (j+1) % k;
          x[j] = ((x[j] ^ x[s]) + 13) % m;
          j = s;
      }         
}

int main() {
    int i,j,k,n,m,poc,kraj,res;
    freopen("ogrlica.in","r",stdin);
    freopen("ogrlica.out","w",stdout);
    
    scanf("%d", &n);
    scanf("%d %d", &k, &m);
    for (i=0;i<k;i++)
        scanf("%d", &(x[i]));
    
    gen(x,k,a,n,m);
    
    
    best[0] = n + a[0];
    koji[0] = 0;
    poc = 0;
    kraj = 0;

    
    for (i=1;i<n;i++)  
    {
        while (kraj >=poc && best[kraj]<n-i+a[i])
              kraj--;
        kraj++;
        best[kraj] = n-i+a[i];   
        koji[kraj] = i;   
    }    

    res = a[n-1] + best[poc];
    
    for (i = 0;i<n;i++)
    {
        if (koji[poc]==i)
           poc++;
        while (kraj >=poc && best[kraj]<-i+a[i])
              kraj--;              
              
        kraj++;
        best[kraj] = -i+a[i];   
        koji[kraj] = i; 
        
        int tr = a[i] + i + 1 + best[poc];       
        res = res>tr?res:tr;           
    }
    
    printf("%d\n", res);
    return 0;   
}
