#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define notall(x) x.begin()+1,x.end()
#define all(x) x.begin(),x.end()
#define mul_t int _t;cin>>_t;while(_t--)
const int int_inf = 1000000100;
const ll ll_inf = 1000000000000000100;
template<class T>
void writeln(const T &t) {
cout << t << '\n';
}
template<class T, class...args>
void writeln(const T &t, const args &...rest) {
cout << t << ' ';
writeln(rest...);
}
template<class T1>
void writeln(const vector<T1> &v) {
for (auto c : v)
cout << c << ' ';
cout << ' ' << '\n';
}
template<class T1, class T2>
void writeln(const vector<T1> &v, T2 n) {
for (T2 i = 1; i <= n; i++)
cout << v[i] << ' ';
cout << ' ' << '\n';
}
template<class T1, class T2>
void writeln(const pair<T1, T2> p) {
cout << p.first << ' ' << p.second << ' ' << '\n';
}
const int maxn=8e5+5;
int n,m,q,cnt;
int val[maxn],f[maxn],fa[maxn][21],isvis[maxn],sz[maxn],dep[maxn];
vector<array<int,3>>g,gg;
vector<int>e[maxn];
int ffind(int u)
{
return u==f[u]?u:f[u]=ffind(f[u]);
}
void dfs(int x)
{
isvis[x]=1;
for(int i=1;i<=20;i++)
fa[x][i]=fa[fa[x][i-1]][i-1];
for(auto v:e[x])
{
dep[v]=dep[x]+1;
fa[v][0]=x;
dfs(v);
sz[x]+=sz[v];
}
}
int lca(int x,int y)
{
if(ffind(x)!=ffind(y))return -1;
if(dep[x]<dep[y])swap(x,y);
for(int i=20;i>=0;i--)if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
if(x==y)return x;
for(int i=20;i>=0;i--)if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
return fa[x][0];
}
int get(int u,int x)
{
for(int i=20;i>=0;i--)
if(fa[u][i]&&val[fa[u][i]]>=x)
u=fa[u][i];
return u;
}
void solve(){
cin>>n>>m>>q;
cnt=n;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
g.push_back({w,u,v});
}
gg=g;
for(int i=1;i<=2*n-1;i++)f[i]=i;
for(int i=1;i<=n;i++)sz[i]=1;
sort(all(g),greater<array<int,3>>());
for(auto[w,u,v]:g)
{
u=ffind(u),v=ffind(v);
if(u!=v)
{
++cnt;
f[u]=f[v]=f[cnt]=cnt;
val[cnt]=w;
e[cnt].push_back(u),e[cnt].push_back(v);
}
if(cnt>=2*n-1)break;
}
for(int i=cnt;i>=1;i--)
{
if(isvis[i])continue;
fa[i][0]=i,dep[i]=1;
dfs(i);
}
int now=-1;
for(int i=1;i<=q;i++)
{
int op,x,y;
cin>>op;
if(op==1)
{
cin>>now;
}
else if(op==2)
{
cin>>x;
x=get(x,now);
writeln(sz[x]);
}
else
{
cin>>x>>y;
x--;
int u=gg[x][1],v=gg[x][2];
int c=lca(u,v);
val[c]=y;
}
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cout << fixed << setprecision(15);
solve();
}