#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key
typedef long long ll;
typedef pair<ll,ll> ii;
typedef vector<int> vi;
typedef long double ld;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<int>::iterator sit;
typedef map<int,int>::iterator mit;
typedef vector<int>::iterator vit;
struct DSU
{
int S;
struct node
{
int p; ll sum;
};
vector<node> dsu;
DSU(int n)
{
S = n;
for(int i = 0; i < n; i++)
{
node tmp;
tmp.p = i; tmp.sum = 0;
dsu.pb(tmp);
}
}
void reset(int n)
{
dsu.clear();
S = n;
for(int i = 0; i < n; i++)
{
node tmp;
tmp.p = i; tmp.sum = 0;
dsu.pb(tmp);
}
}
int rt(int u)
{
if(dsu[u].p == u) return u;
dsu[u].p = rt(dsu[u].p);
return dsu[u].p;
}
void merge(int u, int v)
{
u = rt(u); v = rt(v);
if(u == v) return ;
if(rand()&1) swap(u, v);
dsu[v].p = u;
dsu[u].sum += dsu[v].sum;
}
bool sameset(int u, int v)
{
if(rt(u) == rt(v)) return true;
return false;
}
void updsum(int u, ll s)
{
int r = rt(u);
dsu[r].sum += s;
}
ll getstat(int u)
{
return dsu[rt(u)].sum;
}
};
typedef pair<ii,ii> iiii;
const int N = 200000;
DSU dsu(N+10);
set<ii> edges;
vector<pair<int,ii> > query;
vector<iiii> question;
ll cnt[N+10];
int n, m, q, k;
int happiness(int u, int v)
{
return (dsu.getstat(u)+dsu.getstat(v));
}
void clr()
{
dsu.reset(n);
for(int i = 0; i < n; i++)
{
dsu.updsum(i, cnt[i]);
}
for(set<ii>::iterator it = edges.begin(); it != edges.end(); it++)
{
int u = (*it).fi; int v = (*it).se;
dsu.merge(u,v);
}
}
ll ans[N+10];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n>>m>>q>>k;
for(int i = 0; i < n; i++)
{
cin>>cnt[i];
}
for(int i = 0; i < m; i++)
{
int u, v;
cin>>u>>v;
u--; v--;
edges.insert(mp(u,v));
}
for(int i = 0; i < q; i++)
{
int t, u, v;
cin>>t>>u>>v;
u--;
if(t==1)
{
v--;
edges.erase(mp(u,v));
edges.erase(mp(v,u));
}
else
{
cnt[u]-=v;
assert(cnt[u]>0);
}
query.pb(mp(t,mp(u,v)));
}
reverse(query.begin(),query.end());
clr();
for(int i = 0; i < k; i++)
{
int u, v, x;
cin>>u>>v>>x;
u--; v--;
question.pb(mp(mp(u,v),mp(x,i)));
}
queue<pair<vector<iiii>, ii> > dq;
dq.push(mp(question, mp(0,q+1)));
int curval = 0;
while(!dq.empty())
{
int l = dq.front().se.fi; int r = dq.front().se.se;
if(l == r)
{
for(int i = 0; i < dq.front().fi.size(); i++)
{
if(l == q + 1) ans[dq.front().fi[i].se.se] = -1;
else ans[dq.front().fi[i].se.se] = q-l;
}
dq.pop();
continue;
}
int mid = (l+r)>>1;
if(curval > mid)
{
curval = 0;
clr();
}
bool infinity = false;
while(curval < mid)
{
if(curval < q)
{
int t = query[curval].fi;
int u = query[curval].se.fi;
int v = query[curval].se.se;
if(t == 1)
{
dsu.merge(u,v);
}
else
{
dsu.updsum(u, v);
}
}
else
{
infinity = true;
}
curval++;
}
vector<iiii> L, R;
for(int i = 0; i < dq.front().fi.size(); i++)
{
int u = dq.front().fi[i].fi.fi;
int v = dq.front().fi[i].fi.se;
ll w = dq.front().fi[i].se.fi;
if(infinity||happiness(u,v)>=w)
{
L.pb(dq.front().fi[i]);
}
else
{
R.pb(dq.front().fi[i]);
}
}
if(!L.empty()) dq.push(mp(L, mp(l, mid)));
if(!R.empty()) dq.push(mp(R, mp(mid+1,r)));
dq.pop();
}
for(int i = 0; i < k; i++)
{
cout << ans[i] << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiAKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZibyBmaW5kX2J5X29yZGVyCiNkZWZpbmUgb29rIG9yZGVyX29mX2tleQogCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8bGwsbGw+IGlpOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOyAKdHlwZWRlZiB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+IHBiZHM7CnR5cGVkZWYgc2V0PGludD46Oml0ZXJhdG9yIHNpdDsKdHlwZWRlZiBtYXA8aW50LGludD46Oml0ZXJhdG9yIG1pdDsKdHlwZWRlZiB2ZWN0b3I8aW50Pjo6aXRlcmF0b3Igdml0OwogCnN0cnVjdCBEU1UKewoJaW50IFM7CgkKCXN0cnVjdCBub2RlCgl7CgkJaW50IHA7IGxsIHN1bTsKCX07Cgl2ZWN0b3I8bm9kZT4gZHN1OwoJCglEU1UoaW50IG4pCgl7CgkJUyA9IG47CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCQl7CgkJCW5vZGUgdG1wOwoJCQl0bXAucCA9IGk7IHRtcC5zdW0gPSAwOwoJCQlkc3UucGIodG1wKTsKCQl9Cgl9CgkKCXZvaWQgcmVzZXQoaW50IG4pCgl7CgkJZHN1LmNsZWFyKCk7CgkJUyA9IG47CgkJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCQl7CgkJCW5vZGUgdG1wOwoJCQl0bXAucCA9IGk7IHRtcC5zdW0gPSAwOwoJCQlkc3UucGIodG1wKTsKCQl9Cgl9CgkKCWludCBydChpbnQgdSkKCXsKCQlpZihkc3VbdV0ucCA9PSB1KSByZXR1cm4gdTsKCQlkc3VbdV0ucCA9IHJ0KGRzdVt1XS5wKTsKCQlyZXR1cm4gZHN1W3VdLnA7Cgl9CgkKCXZvaWQgbWVyZ2UoaW50IHUsIGludCB2KQoJewoJCXUgPSBydCh1KTsgdiA9IHJ0KHYpOwoJCWlmKHUgPT0gdikgcmV0dXJuIDsKCQlpZihyYW5kKCkmMSkgc3dhcCh1LCB2KTsKCQlkc3Vbdl0ucCA9IHU7CgkJZHN1W3VdLnN1bSArPSBkc3Vbdl0uc3VtOwoJfQoJCglib29sIHNhbWVzZXQoaW50IHUsIGludCB2KQoJewoJCWlmKHJ0KHUpID09IHJ0KHYpKSByZXR1cm4gdHJ1ZTsKCQlyZXR1cm4gZmFsc2U7Cgl9CgkKCXZvaWQgdXBkc3VtKGludCB1LCBsbCBzKQoJewoJCWludCByID0gcnQodSk7CgkJZHN1W3JdLnN1bSArPSBzOwoJfQoJCglsbCBnZXRzdGF0KGludCB1KQoJewoJCXJldHVybiBkc3VbcnQodSldLnN1bTsKCX0KfTsKIAp0eXBlZGVmIHBhaXI8aWksaWk+IGlpaWk7CiAKY29uc3QgaW50IE4gPSAyMDAwMDA7CkRTVSBkc3UoTisxMCk7CnNldDxpaT4gZWRnZXM7CnZlY3RvcjxwYWlyPGludCxpaT4gPiBxdWVyeTsKdmVjdG9yPGlpaWk+IHF1ZXN0aW9uOwpsbCBjbnRbTisxMF07CmludCBuLCBtLCBxLCBrOwogCmludCBoYXBwaW5lc3MoaW50IHUsIGludCB2KQp7CQoJcmV0dXJuIChkc3UuZ2V0c3RhdCh1KStkc3UuZ2V0c3RhdCh2KSk7CQp9CiAKdm9pZCBjbHIoKQp7Cglkc3UucmVzZXQobik7Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQoJewoJCWRzdS51cGRzdW0oaSwgY250W2ldKTsKCX0KCWZvcihzZXQ8aWk+OjppdGVyYXRvciBpdCA9IGVkZ2VzLmJlZ2luKCk7IGl0ICE9IGVkZ2VzLmVuZCgpOyBpdCsrKQoJewoJCWludCB1ID0gKCppdCkuZmk7IGludCB2ID0gKCppdCkuc2U7CgkJZHN1Lm1lcmdlKHUsdik7Cgl9Cn0KIApsbCBhbnNbTisxMF07CiAKaW50IG1haW4oKQp7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwoJY2luPj5uPj5tPj5xPj5rOwoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQljaW4+PmNudFtpXTsKCX0KCWZvcihpbnQgaSA9IDA7IGkgPCBtOyBpKyspCgl7CgkJaW50IHUsIHY7CgkJY2luPj51Pj52OwoJCXUtLTsgdi0tOwoJCWVkZ2VzLmluc2VydChtcCh1LHYpKTsKCX0KCWZvcihpbnQgaSA9IDA7IGkgPCBxOyBpKyspCgl7CgkJaW50IHQsIHUsIHY7CgkJY2luPj50Pj51Pj52OwoJCXUtLTsKCQlpZih0PT0xKQoJCXsKCQkJdi0tOwoJCQllZGdlcy5lcmFzZShtcCh1LHYpKTsKCQkJZWRnZXMuZXJhc2UobXAodix1KSk7CgkJfQoJCWVsc2UKCQl7CgkJCWNudFt1XS09djsKCQkJYXNzZXJ0KGNudFt1XT4wKTsKCQl9CgkJcXVlcnkucGIobXAodCxtcCh1LHYpKSk7Cgl9CglyZXZlcnNlKHF1ZXJ5LmJlZ2luKCkscXVlcnkuZW5kKCkpOwoJY2xyKCk7Cglmb3IoaW50IGkgPSAwOyBpIDwgazsgaSsrKQoJewoJCWludCB1LCB2LCB4OwoJCWNpbj4+dT4+dj4+eDsKCQl1LS07IHYtLTsKCQlxdWVzdGlvbi5wYihtcChtcCh1LHYpLG1wKHgsaSkpKTsKCX0KCXF1ZXVlPHBhaXI8dmVjdG9yPGlpaWk+LCBpaT4gPiBkcTsKCWRxLnB1c2gobXAocXVlc3Rpb24sIG1wKDAscSsxKSkpOwoJaW50IGN1cnZhbCA9IDA7Cgl3aGlsZSghZHEuZW1wdHkoKSkKCXsKCQlpbnQgbCA9IGRxLmZyb250KCkuc2UuZmk7IGludCByID0gZHEuZnJvbnQoKS5zZS5zZTsKCQlpZihsID09IHIpCgkJewoJCQlmb3IoaW50IGkgPSAwOyBpIDwgZHEuZnJvbnQoKS5maS5zaXplKCk7IGkrKykKCQkJewoJCQkJaWYobCA9PSBxICsgMSkgYW5zW2RxLmZyb250KCkuZmlbaV0uc2Uuc2VdID0gLTE7CgkJCQllbHNlIGFuc1tkcS5mcm9udCgpLmZpW2ldLnNlLnNlXSA9IHEtbDsKCQkJfQoJCQlkcS5wb3AoKTsKCQkJY29udGludWU7CgkJfQoJCWludCBtaWQgPSAobCtyKT4+MTsKCQlpZihjdXJ2YWwgPiBtaWQpCgkJewoJCQljdXJ2YWwgPSAwOwoJCQljbHIoKTsKCQl9CgkJYm9vbCBpbmZpbml0eSA9IGZhbHNlOwoJCXdoaWxlKGN1cnZhbCA8IG1pZCkKCQl7CgkJCWlmKGN1cnZhbCA8IHEpCgkJCXsKCQkJCWludCB0ID0gcXVlcnlbY3VydmFsXS5maTsKCQkJCWludCB1ID0gcXVlcnlbY3VydmFsXS5zZS5maTsKCQkJCWludCB2ID0gcXVlcnlbY3VydmFsXS5zZS5zZTsKCQkJCWlmKHQgPT0gMSkKCQkJCXsKCQkJCQlkc3UubWVyZ2UodSx2KTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlkc3UudXBkc3VtKHUsIHYpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaW5maW5pdHkgPSB0cnVlOwoJCQl9CgkJCWN1cnZhbCsrOwoJCX0KCQl2ZWN0b3I8aWlpaT4gTCwgUjsKCQlmb3IoaW50IGkgPSAwOyBpIDwgZHEuZnJvbnQoKS5maS5zaXplKCk7IGkrKykKCQl7CgkJCWludCB1ID0gZHEuZnJvbnQoKS5maVtpXS5maS5maTsKCQkJaW50IHYgPSBkcS5mcm9udCgpLmZpW2ldLmZpLnNlOwoJCQlsbCB3ID0gZHEuZnJvbnQoKS5maVtpXS5zZS5maTsKCQkJaWYoaW5maW5pdHl8fGhhcHBpbmVzcyh1LHYpPj13KQoJCQl7CgkJCQlMLnBiKGRxLmZyb250KCkuZmlbaV0pOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJUi5wYihkcS5mcm9udCgpLmZpW2ldKTsKCQkJfQoJCX0KCQlpZighTC5lbXB0eSgpKSBkcS5wdXNoKG1wKEwsIG1wKGwsIG1pZCkpKTsKCQlpZighUi5lbXB0eSgpKSBkcS5wdXNoKG1wKFIsIG1wKG1pZCsxLHIpKSk7CgkJZHEucG9wKCk7Cgl9Cglmb3IoaW50IGkgPSAwOyBpIDwgazsgaSsrKQoJewoJCWNvdXQgPDwgYW5zW2ldIDw8ICdcbic7Cgl9Cn0KIA==