#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#define endl '\n'
//#pragma GCC optimize("Ofast")
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair < int, int >;
using pll = pair < ll, ll >;
const ll INF = 2e18;
const ll DIM = 100007;
const ll DIMQ = 2007;
const ld PI = 3.1415926535;
const int mod = 998244353;
struct point {
int x, y, z;
};
vector < pii > merge(vector < pii > v1, vector < pii > v2) {
vector < pii > res = v1;
for(auto x: v2) res.push_back(x);
sort(res.begin(), res.end());
vector < pii > tmp;
for(int i = res.size() - 1; i >= 0 && tmp.size() < 5; i--) {
if(tmp.size() == 0 || tmp.back() != res[i]) tmp.push_back(res[i]);
}
reverse(tmp.begin(), tmp.end());
return tmp;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef IloveCP
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int l, n, k;
cin >> l >> n >> k;
vector < int > X, Y;
map < pii, vector < pii > > Z;
for(int i = 0; i < n; i++) {
int x, y, z;
cin >> x >> y >> z;
X.push_back(x);
Y.push_back(y);
Z[{x, y}].push_back({x + y + z, i});
}
sort(X.begin(), X.end());
sort(Y.begin(), Y.end());
X.erase(unique(X.begin(), X.end()), X.end());
Y.erase(unique(Y.begin(), Y.end()), Y.end());
vector < vector < vector < pii > > > s(X.size(), vector < vector < pii > >(Y.size()));
vector < ll > res(k + 1, 0);
for(int i = 0; i < X.size(); i++) {
for(int j = 0; j < Y.size(); j++) {
if(Z[{X[i], Y[j]}].size() != 0) {
s[i][j] = Z[{X[i], Y[j]}];
sort(s[i][j].rbegin(), s[i][j].rend());
while(s[i][j].size() > 5) s[i][j].pop_back();
reverse(s[i][j].begin(), s[i][j].end());
}
if(i != 0) s[i][j] = merge(s[i][j], s[i - 1][j]);
if(j != 0) s[i][j] = merge(s[i][j], s[i][j - 1]);
for(int tk = 0; tk < s[i][j].size(); tk++) {
ll cnt = max(0, s[i][j][tk].first - (X[i] + Y[j]));
ll dx, dy;
if(i == X.size() - 1) dx = l + 1 - Y[j] - X[i];
else dx = X[i + 1] - X[i];
if(j == Y.size() - 1) dy = l + 1 - X[i] - Y[j];
else dy = Y[j + 1] - Y[j];
ll l1 = cnt - min(cnt, dy);
ll l2 = cnt - min(cnt, dx);
ll l3 = l2 - min(l2, dy);
ll val = cnt * cnt - l1 * l1 - l2 * l2 + l3 * l3;
//cout << s[i][j].size() - tk << " " << X[i] << " " << Y[j] << " " << val << endl;
res[s[i][j].size() - tk] += val;
}
}
}
for(int i = 1; i <= k; i++) {
cout << res[i] << endl;
}
return 0;
}