#include<bits/stdc++.h>
using namespace std;
int n,m,p,dp[80][80],f[80][80],g[80][80][80],a[80][80],ans;
int mod(int x,int y){
return ((x % y) + y) % y;
}
int main(){
cin >> n >> m >> p;
for(int i = 1;i <= n;i ++){
for(int j = 1;j <= m;j ++){
cin >> a[i][j];
}
}
for(int i = 1;i <= n;i ++){
memset(g,0,sizeof(g));
for(int j = 1;j <= m;j ++){
for(int k = 1;k <= min(j,m / 2);k ++){
for(int l = 0;l < p;l ++){
if(k == 1 and a[i][j] % p == l){
g[j][k][l] = a[i][j];
}
if(g[j - 1][k - 1][mod(l - a[i][j],p)] == 0){
g[j][k][l] = max(g[j][k][l],g[j - 1][k][l]);
}else{
g[j][k][l] = max(g[j - 1][k][l],g[j - 1][k - 1][mod(l - a[i][j],p)] + a[i][j]);
}
f[i][l] = max(f[i][l],g[j][k][l]);
}
}
}
}
for(int i = 1;i <= n;i ++){
for(int j = 0;j < p;j ++){
dp[i][j] = dp[i - 1][j];
for(int k = 0;k < p;k ++){
if(mod(f[i][k],p) == j){
dp[i][j] = max(dp[i][j],f[i][k]);
}
if(dp[i - 1][mod(j - k,p)] == 0){
continue;
}
dp[i][j] = max(dp[i][j],dp[i - 1][mod(j - k,p)] + f[i][k]);
}
}
ans = max(ans,dp[i][0]);
}
cout << ans;
return 0;
}