#ifndef __clang__
    #pragma GCC optimize "-O3"
    #pragma GCC target "tune=native"
    #endif
    #ifdef ONLINE_JUDGE
    #define NDEBUG 1
    #endif
    #include <stdio.h>
    #include <bits/stdc++.h>
     
    #define DESTRUCT2(p, a, b)                      \
      auto a = get<0>(p);                           \
      auto b = get<1>(p);
     
    #define DESTRUCT3(p, a, b, c)                   \
      auto a = get<0>(p);                           \
      auto b = get<1>(p);                           \
      auto c = get<2>(p);
     
    #define DESTRUCT4(p, a, b, c, d)                \
      auto a = get<0>(p);                           \
      auto b = get<1>(p);                           \
      auto c = get<2>(p);                           \
      auto d = get<3>(p);
     
    #define FOR(i, n)     for(lli i = 0; i < (lli)(n); ++i)
    #define FORU(i, j, k) for(lli i = (j); i <= (lli)(k); ++i)
    #define FORD(i, j, k) for(lli i = (j); i >= (lli)(k); --i)
     
    #define SQ(x) ((x)*(x))
     
    #define all(x) begin(x), end(x)
    #define rall(x) rbegin(x), rend(x)
    #define mp make_pair
    #define mt make_tuple
    #define pb push_back
    #define eb emplace_back
     
    using namespace std;
     
    template<typename... As>
    struct tpl : public std::tuple<As...> {
      using std::tuple<As...>::tuple;
     
      template<typename T = tuple<As...> >
      typename tuple_element<0, T>::type const&
      x() const { return get<0>(*this); }
      template<typename T = tuple<As...> >
      typename tuple_element<0, T>::type&
      x() { return get<0>(*this); }
     
      template<typename T = tuple<As...> >
      typename tuple_element<1, T>::type const&
      y() const { return get<1>(*this); }
      template<typename T = tuple<As...> >
      typename tuple_element<1, T>::type&
      y() { return get<1>(*this); }
     
      template<typename T = tuple<As...> >
      typename tuple_element<2, T>::type const&
      z() const { return get<2>(*this); }
      template<typename T = tuple<As...> >
      typename tuple_element<2, T>::type&
      z() { return get<2>(*this); }
     
      template<typename T = tuple<As...> >
      typename tuple_element<3, T>::type const&
      w() const { return get<3>(*this); }
      template<typename T = tuple<As...> >
      typename tuple_element<3, T>::type&
      w() { return get<3>(*this); }
    };
     
    using lli   = long long int;
    using llu   = long long unsigned;
     
    using pii   = tpl<lli, lli>;
    using piii  = tpl<lli, lli, lli>;
    using piiii = tpl<lli, lli, lli, lli>;
    using vi    = vector<lli>;
    using vii   = vector<pii>;
    using viii  = vector<piii>;
    using vvi   = vector<vi>;
    using vvii  = vector<vii>;
    using vviii = vector<viii>;
     
    template<class T>
    using min_queue = priority_queue<T, vector<T>, greater<T> >;
    template<class T>
    using max_queue = priority_queue<T>;
     
    template<size_t... I>
    struct my_index_sequence {
      using type = my_index_sequence;
      static constexpr array<size_t, sizeof...(I)> value = { {I...} };
    };
     
    namespace my_index_sequence_detail {
      template<typename I, typename J> struct concat;
      template<size_t... I, size_t... J>
      struct concat<my_index_sequence<I...>, my_index_sequence<J...> > :
        my_index_sequence<I..., (sizeof...(I)+J)...> { };
      template<size_t N> struct make_index_sequence :
        concat<typename make_index_sequence<N/2>::type, typename make_index_sequence<N-N/2>::type>::type { };
      template <> struct make_index_sequence<0> : my_index_sequence<>{};
      template <> struct make_index_sequence<1> : my_index_sequence<0>{};
    }
     
    template<class... A>
    using my_index_sequence_for = typename my_index_sequence_detail::make_index_sequence<sizeof...(A)>::type;
     
    template<class T, size_t... I>
    void print_tuple(ostream& s, T const& a, my_index_sequence<I...>){
      using swallow = int[];
      (void)swallow{0, (void(s << (I == 0? "" : ", ") << get<I>(a)), 0)...};
    }
     
    template<class T>
    ostream& print_collection(ostream& s, T const& a);
    template<class... A>
    ostream& operator<<(ostream& s, tpl<A...> const& a);
    template<class... A>
    ostream& operator<<(ostream& s, tuple<A...> const& a);
    template<class A, class B>
    ostream& operator<<(ostream& s, pair<A, B> const& a);
     
    template<class T, size_t I>
    ostream& operator<<(ostream& s, array<T, I> const& a) { return print_collection(s, a); }
    template<class T>
    ostream& operator<<(ostream& s, vector<T> const& a) { return print_collection(s, a); }
    template<class T, class U>
    ostream& operator<<(ostream& s, multimap<T, U> const& a) { return print_collection(s, a); }
    template<class T>
    ostream& operator<<(ostream& s, multiset<T> const& a) { return print_collection(s, a); }
    template<class T, class U>
    ostream& operator<<(ostream& s, map<T, U> const& a) { return print_collection(s, a); }
    template<class T>
    ostream& operator<<(ostream& s, set<T> const& a) { return print_collection(s, a); }
     
    template<class T>
    ostream& print_collection(ostream& s, T const& a){
      s << '[';
      for(auto it = begin(a); it != end(a); ++it){
        s << *it;
        if(it != prev(end(a))) s << " ";
      }
      return s << ']';
    }
     
    template<class... A>
    ostream& operator<<(ostream& s, tpl<A...> const& a){
      s << '(';
      print_tuple(s, a, my_index_sequence_for<A...>{});
      return s << ')';
    }
     
    template<class... A>
    ostream& operator<<(ostream& s, tuple<A...> const& a){
      s << '(';
      print_tuple(s, a, my_index_sequence_for<A...>{});
      return s << ')';
    }
     
    template<class A, class B>
    ostream& operator<<(ostream& s, pair<A, B> const& a){
      return s << "(" << get<0>(a) << ", " << get<1>(a) << ")";
    }
     
    namespace std {
      namespace {
        template <class T>
        inline void hash_combine(size_t& seed, T const& v) {
          seed ^= hash<T>()(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
        }
        template <class Tuple, size_t Index = tuple_size<Tuple>::value - 1>
        struct HashValueImpl {
          static void apply(size_t& seed, Tuple const& tuple) {
            HashValueImpl<Tuple, Index-1>::apply(seed, tuple);
            hash_combine(seed, get<Index>(tuple));
          }
        };
        template <class Tuple>
        struct HashValueImpl<Tuple, 0> {
          static void apply(size_t& seed, Tuple const& tuple) {
            hash_combine(seed, get<0>(tuple));
          }
        };
      }
      template <typename ... TT>
      struct hash<tuple<TT...>> {
        size_t operator()(tuple<TT...> const& tt) const {
          size_t seed = 0;
          HashValueImpl<tuple<TT...> >::apply(seed, tt);
          return seed;
        }
      };
      template <typename ... TT>
      struct hash<tpl<TT...>> {
        size_t operator()(tpl<TT...> const& tt) const {
          size_t seed = 0;
          HashValueImpl<tuple<TT...> >::apply(seed, tt);
          return seed;
        }
      };
    }
     
    //------------------------------------------------------------------------------
     
    const lli N=2e5;
    lli A[N];
    lli B[N];
    lli C[N];
     
    lli E[N];
     
    int main(){
      ios::sync_with_stdio(0); cin.tie(0);
      lli x,y,z; cin>>x>>y>>z;
      lli n=x+y+z;
      FOR(i,n) {
        cin>>A[i]>>B[i]>>C[i];
        E[i]=0;
      }
     
      lli ans = 0;
     
      {
        max_queue<pii> Q; FOR(i,n) Q.push(pii(A[i],i));
        FOR(nx,x) {
          lli i; tie(ignore, i) = Q.top(); Q.pop();
          ans += A[i];
          E[i] = 1;
        }
      }
     
      {
        max_queue<pii> QX, QY;
        max_queue<pii> QXTOY;
        FOR(i,n) if(E[i] == 0) {
          QX.push(pii(A[i],i));
          QY.push(pii(B[i],i));
        } else if(E[i] == 1) {
          QXTOY.push(pii(B[i]-A[i],i));
        }
        FOR(ny,y) {
          while(E[QX.top().y()] != 0) QX.pop();
          while(E[QY.top().y()] != 0) QY.pop();
          lli vy = QY.top().x();
          lli vxtoy = QXTOY.top().x() + QX.top().x();
          lli val = max(vy, vxtoy);
          ans += val;
          if(val == vy) {
            lli i; tie(ignore,i) = QY.top();
            E[i] = 2;
          }else{
            lli i; tie(ignore,i) = QX.top();
            lli j; tie(ignore,j) = QXTOY.top(); QXTOY.pop();
            E[i] = 1; E[j] = 2;
            QXTOY.push(pii(B[i]-A[i],i));
          }
        }
      }
     
      {
        max_queue<pii> QX,QY,QZ;
        max_queue<pii> QXTOZ,QYTOZ,QXTOY,QYTOX;
        FOR(i,n) if(E[i] == 0) {
          QX.push(pii(A[i],i));
          QY.push(pii(B[i],i));
          QZ.push(pii(C[i],i));
        }else if(E[i] == 1) {
          QXTOZ.push(pii(C[i]-A[i],i));
          QXTOY.push(pii(B[i]-A[i],i));
        }else{
          QYTOZ.push(pii(C[i]-B[i],i));
          QYTOX.push(pii(A[i]-B[i],i));
        }
        FOR(nz,z) {
          while(E[QX.top().y()] != 0) QX.pop();
          while(E[QY.top().y()] != 0) QY.pop();
          while(E[QZ.top().y()] != 0) QZ.pop();
          while(E[QXTOY.top().y()] != 1) QXTOY.pop();
          while(E[QXTOZ.top().y()] != 1) QXTOZ.pop();
          while(E[QYTOZ.top().y()] != 2) QYTOZ.pop();
          while(E[QYTOX.top().y()] != 2) QYTOX.pop();
          lli vz = QZ.top().x();
          lli vxtoz = QX.top().x() + QXTOZ.top().x();
          lli vytoz = QY.top().x() + QYTOZ.top().x();
          lli vxtoy = QX.top().x() + QXTOY.top().x() + QYTOZ.top().x();
          lli vytox = QY.top().x() + QYTOX.top().x() + QXTOZ.top().x();
          lli val = max(vz,max(vxtoz,max(vytoz,max(vxtoy,vytox))));
          ans += val;
          if(val == vz) {
            lli i; tie(ignore,i) = QZ.top();
            E[i] = 3;
          }else if(val == vxtoz) {
            lli i; tie(ignore,i) = QX.top();
            lli j; tie(ignore,j) = QXTOZ.top();
            E[i] = 1; E[j] = 3;
            QXTOZ.push(pii(C[i]-A[i],i));
            QXTOY.push(pii(B[i]-A[i],i));
          }else if(val == vytoz) {
            lli i; tie(ignore,i) = QY.top();
            lli j; tie(ignore,j) = QYTOZ.top();
            E[i] = 2; E[j] = 3;
            QYTOZ.push(pii(C[i]-B[i],i));
            QYTOX.push(pii(A[i]-B[i],i));
          }else if(val == vxtoy) {
            lli i; tie(ignore,i) = QX.top();
            lli j; tie(ignore,j) = QXTOY.top();
            lli k; tie(ignore,k) = QYTOZ.top();
            E[i]=1; E[j]=2; E[k]=3;
            QXTOZ.push(pii(C[i]-A[i],i));
            QXTOY.push(pii(B[i]-A[i],i));
            QYTOZ.push(pii(C[j]-B[j],j));
            QYTOX.push(pii(A[j]-B[j],j));
          }else{
            lli i; tie(ignore,i) = QY.top();
            lli j; tie(ignore,j) = QYTOX.top();
            lli k; tie(ignore,k) = QXTOZ.top();
            E[i]=2; E[j]=1; E[k]=3;
            QYTOZ.push(pii(C[i]-B[i],i));
            QYTOX.push(pii(A[i]-B[i],i));
            QXTOZ.push(pii(C[j]-A[j],j));
            QXTOY.push(pii(B[j]-A[j],j));
          }
        }
      }
     
      cout << ans << endl;
      return 0;
    }

Measured memory_bytes: 14596