Memory limit exceeded on test 4
#include <bits/stdc++.h>
#define int long long
int max(int x, int y) { return x > y ? x : y; }
const int N = 110;
int n, m, k, a[N][N], f[N][N][N], prex[N][N][N], prey[N][N][N];
void print(int x, int y, int i) {
if (x == n) return std::cout << y << "\n", void();
int nx = prex[x][y][i], ny = prey[x][y][i], nk = (i - a[x][y] + k) % k;
print(nx, ny, nk);
if (ny == y - 1) std::cout << "R";
else std::cout << "L";
return void();
}
signed main() {
// std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
std::cin >> n >> m >> k;
for (int i = 1; i <= n; ++ i)
for (int j = 1; j <= m; ++ j) {
char ch; std::cin >> ch;
a[i][j] = ch - '0';
}
++ k;
memset(f, -1, sizeof(f));
for (int j = 1; j <= m; ++ j) f[n][j][a[n][j] % k] = max(f[n][j][a[n][j] % k], a[n][j]);
for (int i = n; i >= 1; -- i)
for (int j = 1; j <= m; ++ j)
for (int h = 0; h < k; ++ h) {
if (i + 1 <= n && j + 1 <= m && f[i + 1][j + 1][h] != -1 && f[i][j][(h + a[i][j]) % k] < f[i + 1][j + 1][h] + a[i][j])
f[i][j][(h + a[i][j]) % k] = f[i + 1][j + 1][h] + a[i][j],
prex[i][j][(h + a[i][j]) % k] = i + 1, prey[i][j][(h + a[i][j]) % k] = j + 1;
if (i + 1 <= n && j + 1 <= m && f[i + 1][j - 1][h] != -1 && f[i][j][(h + a[i][j]) % k] < f[i + 1][j - 1][h] + a[i][j])
f[i][j][(h + a[i][j]) % k] = f[i + 1][j - 1][h] + a[i][j],
prex[i][j][(h + a[i][j]) % k] = i + 1, prey[i][j][(h + a[i][j]) % k] = j - 1;
}
int ans = -1;
for (int j = 1; j <= m; ++ j) ans = max(ans, f[1][j][0]);
std::cout << ans << "\n";
if (ans == -1) return 0;
for (int j = 1; j <= m; ++ j)
if (f[1][j][0] == ans) {
print(1, j, 0);
break ;
}
return 0;
}