#include <bits/stdc++.h>
using namespace std;
const int N = 11002;
int n, m, k, s1, s2, f, pesos[N], l[120], r[120], ks[120];
bool visited[N];
long long d[2][N];
vector<pair<long long, int> > g[N];
void dijsk(int qual) {
  memset(visited, false, sizeof visited);
  int s;
  pair<long long, int> aux;
  if (qual == 1)
    s = s1;
  else
    s = s2;
  priority_queue<pair<long long, int> > pq;
  pq.push(pair<long long, int>(0, s));
  for (int i = 0; i < n; i++) d[qual - 1][i] = LLONG_MAX;
  while (!pq.empty()) {
    aux = pq.top();
    pq.pop();
    if (visited[aux.second]) continue;
    visited[aux.second] = true;
    d[qual - 1][aux.second] = -aux.first;
    for (vector<pair<long long, int> >::iterator it = g[aux.second].begin();
         it != g[aux.second].end(); ++it)
      if (!visited[it->first])
        pq.push(pair<long long, int>(aux.first - pesos[it->second], it->first));
  }
}
void result() {
  for (int i = 0; i < k; i++) printf("%d ", pesos[i + m]);
  printf("\n");
}
void solve() {
  bool mudou = true;
  while (mudou) {
    mudou = false;
    dijsk(1);
    dijsk(2);
    for (int i = 0; i < k; i++)
      if (pesos[m + i] != l[i] && d[0][ks[i]] <= d[1][ks[i]]) {
        pesos[m + i] = l[i];
        mudou = true;
      }
  }
  if (d[0][f] < d[1][f]) {
    printf("WIN\n");
    result();
  } else if (d[0][f] == d[1][f]) {
    printf("DRAW\n");
    result();
  } else
    printf("LOSE\n");
}
int main() {
  int a0, a1;
  scanf("%d %d %d", &n, &m, &k);
  scanf("%d %d %d", &s1, &s2, &f);
  s1--;
  s2--;
  f--;
  for (int i = 0; i < m; i++) {
    scanf("%d %d %d", &a0, &a1, &pesos[i]);
    a0--;
    a1--;
    g[a0].push_back(pair<long long, int>(a1, i));
  }
  for (int i = 0; i < k; i++) {
    scanf("%d %d %d %d", &a0, &a1, &l[i], &r[i]);
    a0--;
    a1--;
    g[a0].push_back(pair<long long, int>(a1, m + i));
    pesos[m + i] = r[i];
    ks[i] = a0;
  }
  solve();
  return 0;
}
