#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define db double
#define file(a) freopen(#a".in", "r", stdin), freopen(#a".out", "w", stdout)
#define sky fflush(stdout)
#define gc getchar
#define pc putchar
namespace IO{
template<class T>
inline void read(T &s){
s = 0;char ch = gc();bool f = 0;
while(ch < '0' || '9'<ch) {if(ch == '-') f = 1; ch = gc();}
while('0'<=ch && ch<='9') {s = s * 10 + (ch ^ 48); ch = gc();}
if(ch == '.'){
T p = 0.1;ch = gc();
while('0' <= ch && ch <= '9') {s = s + p * (ch ^ 48);p /= 10;ch = gc();}
}
s = f ? -s : s;
}
template<class T,class ...A>
inline void read(T &s,A &...a){
read(s); read(a...);
}
template<class T>
inline void print(T x){
if(x<0) {x = -x; pc('-');}
static char st[40];
static int top;
top = 0;
do{st[++top] = x - x / 10 * 10 + '0';} while(x /= 10);
while(top) {pc(st[top--]);}
}
template<class T,class ...A>
inline void print(T s,A ...a){
print(s); print(a...);
}
};
using IO::read;
using IO::print;
int n, m;
ll exgcd(ll a, ll b, ll &x, ll &y){
if(!b){
x = 1; y = 0;
return a;
}
ll d = exgcd(b, a % b, y, x);
y -= (a / b) * x;
return d;
}
int main(){
//file(a);
read(n, m);
ll sum = 0;
for(int i = 1; i <= n; ++i){
int x; read(x);
sum += x;
}
ll s = 0, d = 0, k = 0, t = 0;
ll g = exgcd(n, 1ll * n * (n + 1) / 2, s, d);
if(s * n + d * n * (n + 1) / 2 != g){
printf("!\n");
return;
}
ll g2 = exgcd(g, m, k, t);
s *= k; d *= k;
sum %= m;
//g2 %= m;
printf("%lld\n", sum % g2);
ll t2 = sum / g2;
int S = (m - (s * t2 % m + m) % m) % m;
int D = (m - (d * t2 % m + m) % m) % m;
printf("%d %d\n", S, D);
return 0;
}
/*
sum + n * s + n * (n + 1) / 2 * d - m * t == r
*/