#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <string>
#include <climits>

using namespace std;

typedef long long ll;
typedef pair<int,int> ii;

struct hrana {
	ll v;
	double val;	
};

int main() {
	ll t,f,z,k;
	while(cin >> t >> f >> z >> k){
		if(t == 0 && f == 0 && z == 0 && k == 0){
			return 0;
		}
		ll i,j,k,odk,kam;
		double hod;
		
		vector <vector<hrana> > a(f);
		for(i=0;i<t;i++){
			cin >> odk >> kam >> hod;
			odk--;
			kam--;
			hrana b;
			b.v = kam;
			b.val = hod;
			a[odk].push_back(b);
		}
		 
		vector <double> c(f,0);
		c[z] = 1;
		
		queue<ll> q;
		q.push(z);
		while(!q.empty()){
			ll x = q.top();
			q.pop();
			
			for(j=0;j<a[x].size();j++){
				if(c[a[x][j].v] < c[a[x][j].v] + a[x][j].val){
					c[a[x][j].v] = c[a[x][j].v] + a[x][j].val;
					q.push(a[x][j].v);
				}
			}
			if(c[odk] > 1) break;
		}
		if(c[kam] > 0) cout << "TRUE\n";
		else cout << "FALSE\n";
	}
	
	return 0;
}