
import java.util.*;

public class regulate {
	static int[][] servery = null;
	
	public static void main (String[] args){
		Scanner sc = new Scanner(System.in);
		
		while(true){
			int n = sc.nextInt();
			int m = sc.nextInt();
			int c= sc.nextInt();
			int t= sc.nextInt();
			
			if(n==0 && m==0 && c==0 && t==0){
				break;
			}
			
			servery = new int [n][n];
			
			for(int i = 0;i<m;i++){
				int y = sc.nextInt()-1;
				int x = sc.nextInt()-1;
				int l = sc.nextInt();
				servery[y][x] = l;
				servery[x][y] = l;
			}
			
			//printField(servery);
			
			
			for(int i = 0;i<t;i++){
				int odkud = sc.nextInt()-1;
				int kam = sc.nextInt()-1;
				int kdo = sc.nextInt();
				
				if(isAlreadyOwned(odkud, kam, kdo)){
					System.out.println("Already owned.");
					continue;
				}
				
				if(isMonopol(odkud, kdo)){
					System.out.println("Forbidden: monopoly.");
					continue;
				}
				
				
				
				if(!isConnected(odkud, kam)){
					System.out.println("No such cable.");
					continue;
				}
				
				if(isRedundant(odkud, kam, kdo)){
					System.out.println("Forbidden: redundant.");
					continue;
				}
				
				System.out.println("Sold.");
				servery[odkud][kam] = kdo;
				servery[kam][odkud] = kdo;
				
				//printField(servery);
			}
			
			System.out.println();
		}
	}
	
	private static boolean isConnected(int odkud, int kam){
		if(servery[odkud][kam] == 0){
			return false;
		}
		return true;
	}
	
	private static boolean isAlreadyOwned(int odkud, int kam, int kdo){
		if(servery[odkud][kam] == kdo){
			return true;
		}
		return false;
	}
	
	private static boolean isMonopol(int odkud, int kdo){
		int count = 0;
		
		for(int i = 0;i<servery.length;i++){
			if(servery[odkud][i] == kdo){
				count++;
				
				if(count == 2){
					return true;
				}
			}
		}
		
		return false;
	}
	
	private static boolean isRedundant(int odkud, int kam, int kdo){
		int odkud2 = kam;
		int kam2 = odkud;
		
		if(isCon(kam, kdo)){
			
		
		while(true){
			int pozice = -1;
			
			for(int i = 0; i<servery.length;i++){
				if(servery[kam2][i] == kdo && i != odkud2){
					pozice = i;
					
					if(pozice == kam){
						return true;
					}
					
					odkud2 = kam2;
					kam2 = pozice;
				}
			}
			
			if(pozice == -1){
				return false;
			}
		}
	}else{
			return false;
	}
	}
	
	private static boolean isCon(int odkud, int kdo){
		for(int i = 0; i<servery.length;i++){
			if(servery[odkud][i] == kdo){
				return true;
			}
		}
		
		return false;
	}
	
	private static void printField(int[][] field){
		for(int i = 0;i<field.length;i++){
			for(int j = 0;j<field[i].length;j++){
				System.out.print(field[i][j] + " ");
			}
			System.out.println();
		}
	}
}