#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int N, M;
cin >> N >> M;
int a[N+1], sum = 0, SUM = 0;
for(int i=0; i<N; i++){
cin >> a[i];
sum = 0;
int tmp;
for(int j=0; j<M; j++){
cin >> tmp;
sum += tmp;
}
SUM += a[i]+sum;
a[i] = -sum;
}
int sn=0, si=0;
for(int i=0; i<N ; i++){
if(sn < a[i]){
sn = a[i];
si = i+1;
}
}
cout << SUM << " " << si << " " << sn << endl;
return 0;
}
/*3 3
73 -8 -6 -4
76 -5 -10 -8
80 -6 -15 0
167 2 23
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
struct T{
bool flag;
int a;
T(){
flag = false, a = 0;
}
}t[1000+1];
int main()
{
ll sum =0;
int cnt = 0,anss = 0, anse = 0;
int N;
scanf("%d", &N);
for(int i=0; i<N ; i++){
int m, tmp;
scanf("%d", &m);
for(int j=0; j<m; j++){
scanf("%d", &tmp);
if(tmp > 0){
if(t[i].a > tmp){//diao
t[i].a = tmp;
t[i].flag = true;
}else t[i].a = tmp;
}else {
t[i].a += tmp;
}
}
sum += t[i].a;
if(t[i].flag){
anss++;
}
}
for(int i=0; i<N ;i++){
if(t[i].flag && t[(i+1)%N].flag && t[(i+2)%N].flag){
anse++;
}
}
cout << sum << " " << anss << " " << anse << endl;
return 0;
}
/*
4
4 74 -7 -12 -5
5 73 -8 -6 59 -4
5 76 -5 -10 60 -2
5 80 -6 -15 59 0
5
4 10 0 9 0
4 10 -2 7 0
2 10 0
4 10 -3 5 0
4 10 -1 8 0
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int n, m, p, q;
int main()
{
scanf("%d%d", &m, &n);
cin.get();
scanf("%d%d", &p, &q); cin.get();
string s;
int ans[3];
int t[m*n][3];
memset(t, 0, sizeof(t));
for(int i=0; i<m*n; i++){
getline(cin, s);
cin.get();
string tmp = s;
if(s.length() == 2) for(int j=0; j<5; j++) s += s[1];
else if(s.length() == 4) for(int j=2; j<7; j++) s[j] = tmp[j/2];
for(int j=1; s[j]; j++){
t[i][(j-1)/2] += s[j]-'0';
t[i][(j-1)/2] *= 16;
}
if(m*n == 1){
ans[1] = t[i][1];
ans[2] = t[i][2];
ans[3] = t[i][3];
}
}
if(m*n >1){
ans[1] = t[0][1]+t[m*n/2][1];
ans[2] = t[0][2]+t[m*n/2][2];
ans[3] = t[0][3]+t[m*n/2][3];
}
string s1 = "\x1B\x5B\x34\x38\x3B";
//R G B
printf("%s\\x%0X\\x3B\\x%0X\\x3B\\x%0X\\x6D", s1.c_str(), ans[1], ans[2], ans[3]);
for(int i=0; i<(m*n)/(p*q); i++)
cout << "\x20";
cout << "\x1B\x5B\x30\x6D";
for(int i=0; i<n/q; i++){
cout << "\x0A";
cout << endl;
}
return 0;
}
/*
1 1
1 1
#010203
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int n, m;
struct Node{
int id, c;
ll num;
}tmp;
bool cmp ( Node b, Node a){
if(b.num == a.num){
if(b.id == a.id){
return b.c < a.c;
}
return b.id<a.id;//s-b
}
return b.num > a.num;
}
int main()
{
scanf("%d%d", &m, &n);
// priority_queue<Node> p[m];
vector<Node> p;
for(int i=0; i<n; i++){
// cin >> tmp.id >> tmp.num;
scanf("%d%lld", &tmp.id, &tmp.num);
for(int j=0; j<m; j++){
tmp.c = j;
p.push_back(tmp);
}
}
int opn, op, tm, tn, ts;
scanf("%d", &opn);
for(int i=0; i<opn; i++){
scanf("%d", &op);
if(op == 1){
scanf("%d%d%lld", &tmp.c, &tmp.id, &tmp.num);
p.push_back(tmp);
}else if(op == 2){
scanf("%d%d", &tmp.c, &tmp.id);
for(int j=0; j<p.size(); j++){
if(p[i].c == tmp.c && p[i].id == tmp.id){
p[i].num = -1;
}
}
}else if(op == 3){
int SK, K[m+1];
vector<int> v[m];
scanf("%d", &SK);
int cnt = 0;
for(int i=0; i<m; i++){
scanf("%d", &K[i]);
}
sort(p.begin(), p.end(), cmp);
for(int j=0; j<p.size(); j++){
int t = p[j].c;
if(p[j].num == -1){
break;
}
if(v[t].size() < K[t] && cnt <SK){
v[t].push_back(p[j].id);
cnt++;
}
}
for(int j=0; j<m; j++){
if(v[j].size() == 0) {
printf("-1\n");
continue;
}
for(int k=0; k<v[j].size()-1; k++){
printf("%d ", v[j][k]);
}
printf("%d\n", v[j].back());
}
}
}
return 0;
}
/*
2 3
1 3
2 2
3 1
8
3 100 1 1
1 0 4 3
1 0 5 1
3 10 2 2
3 10 1 1
2 0 1
3 2 1 1
3 1 1 1
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int main()
{
int N, M, K;
scanf("%d%d%d", &N, &M, &K);
int a[M];
ll dist[K];
ll MAP[N][N];
memset(MAP, inf, sizeof(MAP));
for(int i=0; i<M; i++){
scanf("%d", &a[i]);
}
for(int i=0; i<N-1 ; i++){
int s, e, d;
scanf("%d%d%d", &s, &e, &d);
MAP[s-1][e-1] = MAP[e-1][s-1] = d;
}
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
if(i == j) continue;
for(int k=0; k<N; k++){
if(k == j || k == i) continue;
MAP[i][j] = min(MAP[i][j], MAP[i][k]+MAP[k][j]);
MAP[j][i] = MAP [i][j];
}
}
}
int cnt = 0;
for(int i=0; i<M; i++){
for(int j=0; j<M; j++){
if(i == j) continue;
dist[cnt++] = MAP[a[i]][a[j]];
}
}
sort(dist, dist+cnt);
ll sum = 0;
for(int i=0; i<K-1; i++){
sum += dist[i];
}
cout << sum << endl;
return 0;
}
/*
5 3 2
1 3 5
1 2 4
1 3 5
1 4 3
4 5 1
*/