#include using namespace std; template using vec = vector; template using vvec = vec>; template using lqueue = priority_queue, greater>; template using gqueue = priority_queue, less>; int main() { auto mpow = [](int64_t a, int64_t b, int64_t c) { int64_t ans = 1; while (b) { if (b & 1) { ans = (ans * a) % c; } a = (a * a) % c; b >>= 1; } return ans; }; int n, k; cin >> n >> k; vec a(n); for (auto &e : a) cin >> e; reverse(begin(a), end(a)); int64_t ans = 0, mod = accumulate(begin(a), end(a), int64_t(0)); for (int i = 0; i < n; ++i) { ans += a[i] * mpow(k, i, mod); ans %= mod; } cout << ans << endl; }