#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
struct item {
  int ganancia, cantidad;
  bool operator<(const item& o) const { return ganancia > o.ganancia; }
};
int ganancia(vector<item>& items, int maxcap) {
  sort(items.begin(), items.end());
  int lleno = 0;
  int prof = 0;
  for (int i = 0; i < items.size() && items[i].ganancia > 0 && (lleno < maxcap);
       i++) {
    int c = min(maxcap - lleno, items[i].cantidad);
    lleno += c;
    prof += items[i].ganancia * c;
  }
  return prof;
}
struct planeta {
  vector<int> compra;
  vector<int> venta;
  vector<int> cantidad;
};
int main() {
  ios_base::sync_with_stdio(false);
  int N, M, K;
  cin >> N >> M >> K;
  vector<planeta> planetas(N);
  string line;
  for (int i = 0, _n = N; i < _n; i++) {
    planetas[i].compra.resize(M);
    planetas[i].venta.resize(M);
    planetas[i].cantidad.resize(M);
    cin >> line;
    for (int j = 0, _n = M; j < _n; j++) {
      cin >> planetas[i].compra[j];
      cin >> planetas[i].venta[j];
      cin >> planetas[i].cantidad[j];
    }
  }
  int best = 0;
  for (int i = 0, _n = N; i < _n; i++)
    for (int j = 0, _n = N; j < _n; j++) {
      vector<item> items(M);
      for (int k = 0, _n = M; k < _n; k++) {
        items[k].ganancia = planetas[j].venta[k] - planetas[i].compra[k];
        items[k].cantidad = planetas[i].cantidad[k];
      }
      best = max(best, ganancia(items, K));
    }
  cout << best << endl;
}
