贪心+dp

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//贪心+dp

const int maxs = 110;
const int maxn = 110;
const int maxm = 20010;
int S, n, m, ans;
int a[maxs][maxn], f[maxm];

int main(){
    cin>>S>>n>>m;
    for(int i =1;i<=S;i++){
        for(int j = 1;j<=n;j++){
            cin>>a[j][i];
        }
    }
    for(int i = 1;i<=n;i++) sort(a[i]+1,a[i]+S+1);

    for(int i =1;i<=n;i++){
        for(int j =m;j>=0;j--){
            for(int k=1;k<=S;k++){
                if(j>=2*a[i][k]+1) f[j] = max(f[j],f[j-(2*a[i][k]+1)]+i*k);
            }
        }
    }

    cout<<f[m]<<endl;
    return 0;
}