#include <iostream>
#include <math.h>
#include <algorithm>
#include <string>
#include <string.h>
#include <queue>
#include <vector>
#include <set>
#include <map>
#include <tuple>
#include <stdlib.h>
#define rep(i,n) for (int i = 0; i < (n); ++i)
using namespace std;
#define PI 3.14159265358979
#define a .second.first
#define b .second.second.first
#define c .second.second.second
#define d .first
typedef long long int ll;

const double pi=3.1415;

int main()
{
   int n,m,q,ans=0;
   string s,t;
   cin>>n>>m>>q;
   vector<int>A(n,0);
   vector<bool>flag(n);
   rep(i,n)flag[i]=true;
   vector<pair<int,pair<int,pair<int,int>>>>in(q);
   rep(i,q){
   	cin>>in[i].second.first>>in[i].second.second.first>>in[i].second.second.second>>in[i].first	;
   	in[i].second.first--;
   	in[i].second.second.first--;
   	}
   sort(in.rbegin(),in.rend());
   	rep(i,q)
   	cout<<in[i].first<<endl;
   for(int i=0;i<q;i++)
   {
   	
   	if(flag[in[i].second.second.first]||A[in[i].second.second.first]==A[in[i].second.first]+in[i].second.second.second){
   		flag[in[i].second.second.first]=false;
   		A[in[i].second.second.first]=A[in[i].second.first]+in[i].second.second.second;
   		ans+=in[i].first;
   		cout<<in[i].first<<endl;
   	}
   	else if(flag[in[i].second.first]||A[in[i].second.second.first]==A[in[i].second.first]+in[i].second.second.second){
   		flag[in[i].second.first]=false;
   		A[in[i].second.second.first]=A[in[i].second.first]+in[i].second.second.second;
   		ans+=in[i].first;
   		cout<<in[i].first<<endl;
   	}
   }
   cout<<endl;
   for(int i=0;i<n;i++)
   {
   	
   	cout<<A[i]<<endl;
   }
   cout<<ans;
}
