#include <bits/stdc++.h>
#define Nmax 639
#define INF INT_MAX
using namespace std;
ifstream f("cmcm.in");
ofstream g("cmcm.out");
int N,M,beginning,ending,x,y,cap,c,minimum,solution,d,E;
int capacity[Nmax][Nmax],flow[Nmax][Nmax],cost[Nmax][Nmax];
int T[Nmax],D[Nmax],muchii[Nmax][Nmax],flux;
vector <int> L[Nmax];
bitset <Nmax> inq;
queue <int> q;
bool bellman_ford()
{
for(int i=1;i<=d;i++)
{
D[i]=INF;
inq[i]=false;
}
D[0]=0;
q.push(0);
while(!q.empty())
{
int node=q.front();
inq[node]=0;
q.pop();
for(int i=0;i<L[node].size();i++)
{
int neighbour=L[node][i];
if((D[neighbour]>D[node]+cost[node][neighbour]) and (flow[node][neighbour]<capacity[node][neighbour]))
{
D[neighbour]=D[node]+cost[node][neighbour];
T[neighbour]=node;
if(!inq[neighbour])
{
q.push(neighbour);
inq[neighbour]=true;
}
}
}
}
return D[d]!=INF;
}
int main()
{
f>>N>>M>>E;
for(int i=1;i<=E;i++)
{
f>>x>>y>>c;
L[x].push_back(N+y);
L[N+y].push_back(x);
capacity[x][N+y]=1;
cost[x][N+y]=c;
cost[N+y][x]=-c;
muchii[x][N+y]=i;
}
for(int i=1;i<=N;i++)
{
capacity[0][i]=1;
cost[0][i]=cost[i][0]=0;
L[0].push_back(i);
L[i].push_back(0);
}
d=N+M+1;
for(int i=1;i<=M;i++)
{
capacity[N+i][d]=1;
cost[N+i][d]=cost[d][N+1]=0;
L[N+i].push_back(d);
L[d].push_back(N+i);
}
while(bellman_ford())
{
minimum=INF;
int x=d;
while(x)
{
if(minimum>capacity[T[x]][x]-flow[T[x]][x])
minimum=capacity[T[x]][x]-flow[T[x]][x];
x=T[x];
}
x=d;
while(x)
{
solution+=minimum*cost[T[x]][x];
flow[T[x]][x]+=minimum;
flow[x][T[x]]-=minimum;
x=T[x];
}
flux+=minimum;
}
g<<flux<<' '<<solution<<'\n';
for(int i=1;i<=N;i++)
for(int j=N+1;j<=N+M;j++)
if(flow[i][j]==1)
g<<muchii[i][j]<<' ';
return 0;
}