#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 5e4 + 10, INF = 0x3f3f3f3f;
int n, m, d, k;
int F[N];
int f[209][N];
int siz[N];
ll ans=0;
int find(int x, int f[])
{
if (f[x] == x)return x;
else return f[x] = find(f[x], f);
}
void merge(int x, int y, int f[])
{
int xx = find(x, f);
int yy = find(y, f);
if (xx > yy)swap(xx, yy);
f[yy] = xx;
return;
}
void prin()
{
cout<<"f"<<endl;
for (int j = 1;j <= d + 1;j++)
{
for (int i = 1;i <= n;i++)
{
cout << f[j][i] << " ";
}
cout << endl;
}
cout<<"F"<<endl;
for(int i=1;i<=n;i++)
cout<<F[i]<<" ";
cout<<endl;
}
ll cal(int x)
{
ll res = (ll) (x) * (x ) ;
return res;
}
void solve()
{
// freopen("1012.in","r",stdin);
// freopen("1012.out","w",stdout);
cin >> d >> n >> k;
// cout<<"K"<<k<<endl;
d--;
int dd=d;
for (int i = 1;i <= n;i++)
F[i] = i;
for (int c = 1;c <= d + 1;c++)
for (int i = 1;i <= n;i++)
f[d][i] = i;
for(int i=1;i<=n;i++)
siz[i]=0;
ans = 0;
m=0;
for (int i = 1;i <= m;i++)
{
int x, y;
cin >> x >> y;
merge(x, y, F);
}
for (int j = 1;j <= d + 1;j++)
for (int i = 1;i <= n;i++)
f[j][i] = F[i];
for (int i = 1;i <= n;i++)
siz[F[i]]++;
ans=n;
int c=1;
while (k--)
{
// cout<<"ccc"<<c<<endl;
// c++;
int x, y, d;
cin >> x >> y >> d;
// cout<<"k"<<k<<endl;
// xx yy d
int xx = find(x, f[d]);
int yy = find(y, f[d]);
if (xx > yy)swap(xx, yy);
if (xx == yy)
{
cout <<ans << endl;
continue;
}
merge(xx, yy, f[d]);
int tmp = 1;
for (int j = 1;j <= dd + 1;j++)
{
if(find(x,f[j])==find(y,f[j]) ) continue;
else
{
tmp=0;
break;
}
}
if (tmp == 1)
{
xx=find(x,F),yy=find(y,F);
merge(x, y, F);
ans = ans - cal(siz[xx]) - cal(siz[yy]) + cal(siz[xx] + siz[yy]);
siz[xx] += siz[yy];siz[yy] = 0;
cout <<ans << endl;
}
else
cout <<ans << endl;
// prin();
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
/*
1 1 3 3
1 1 1 1
1 1 1 1
*/