use std::collections::VecDeque;

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace()
        .map(|e| e.parse().ok().unwrap()).collect()
}

fn main() {
    let nk: Vec<usize> = read_vec();
    let n: usize = nk[0];
    let k: usize = nk[1];
    let a: Vec<usize> = read_vec();
    let mut q: VecDeque<usize> = VecDeque::from(a.clone());

    let mut sum: usize = 0;
    for i in 0..n {
        sum += a[i];
    }

    let mut m: usize = 0;
    for _i in 0..n {
        let num: usize = q.pop_front().unwrap();
        m *= k;
        m += num;
        m %= sum;
    }

    println!("{}", m);
}