#include<cstdio>
#include<set>
#include<algorithm>
#include<vector>
#include<queue>

using namespace std;

#define REP(i,n) for(int i = 0; i < (n); ++i)
#define FOR(i,a,b) for(int i = (a); i < (b); ++i)
#define MP make_pair
#define ST first
#define ND second
#define PB push_back

const int N = 8004;
const int C = 103;

int n,m,c,t,i,j,k,a,b,d,e,lewa[C][N],prawa[C][N],used[N],tab[N][N],st[C][N];
vector <int> ile[C][N];

int main () {
while (1) {
  scanf ("%d %d %d %d",&n,&m,&c,&t);
  if (n==0) break;
  for (i=0;i<n;i++) {
    for (j=0;j<n;j++) tab[i][j]=-1;
    for (j=0;j<c;j++) ile[j][i].resize(0);
  }
  while (m--) {
    scanf ("%d %d %d",&a,&b,&d);
    a--; b--; d--;
    tab[a][b]=tab[b][a]=d; ile[d][a].PB(b); ile[d][b].PB(a);
  }
  for (i=0;i<c;i++) {
    for (j=0;j<n;j++) used[j]=0;
    for (j=0;j<n;j++) if (!used[j]) {
      used[j]=1;
      if (ile[i][j].size()==0) lewa[i][j]=prawa[i][j]=-1;
      else if (ile[i][j].size()==1) {
        lewa[i][j]=-1; prawa[i][j]=ile[i][j][0];
        k=ile[i][j][0];
        while (1) {
          used[k]=1;
          if (ile[i][k].size()==1) {
            lewa[i][k]=ile[i][k][0]; prawa[i][k]=-1;
            break;
          }
          else {
            if (used[ile[i][k][0]]) {
              lewa[i][k]=ile[i][k][0]; prawa[i][k]=ile[i][k][1];
              k=ile[i][k][1];
            }
            else {
              lewa[i][k]=ile[i][k][1]; prawa[i][k]=ile[i][k][0];
              k=ile[i][k][0];
            }
          }
        }
      }
    }
  }
  while (t--) {
    scanf ("%d %d %d",&a,&b,&d);
    a--; b--; d--;
    st[d][a]=st[d][b]=0;
    if (lewa[d][a]!=-1) st[d][a]++; if (prawa[d][a]!=-1) st[d][a]++;
    if (lewa[d][b]!=-1) st[d][b]++; if (prawa[d][b]!=-1) st[d][b]++;
    if (tab[a][b]==-1) printf("No such cable.\n");
    else if (tab[a][b]==d) printf("Already owned.\n");
    else if (st[d][a]==2 || st[d][b]==2) printf("Forbidden: monopoly.\n");
    else {
      e=a;
      if (lewa[d][a]==-1) {
        while(prawa[d][e]!=-1) e=prawa[d][e];
      }
      else {
        while(lewa[d][e]!=-1) e=lewa[d][e];
      }
      if (e==b) printf("Forbidden: redundant.\n");
      else {
        printf("Sold.\n");
        e = tab[a][b];
        if (lewa[e][a]==b) {lewa[e][a]=-1; prawa[e][b]=-1;}
        else {prawa[e][a]=-1; lewa[e][b]=-1;}
        if (lewa[d][a]==-1) {lewa[d][a]=b; prawa[d][b]=a;}
        else {prawa[d][a]=b; lewa[d][b]=a;}
        tab[a][b]=tab[b][a]=d;
      }
    }
  }
  printf("\n");
}
return 0;
}