#include <bits/stdc++.h>
using namespace std;
const int N = 20010;
struct edge {
  int to, pre, c;
} e[N];
int u[N], el = 0;
void ins(int a, int b, int c) { e[++el] = (edge){b, u[a], c}, u[a] = el; }
const long long inf = N * 1000000010LL;
long long d1[N], d2[N];
int T, n;
bool ch[N];
priority_queue<pair<long long, int> > q;
void dij(int S, long long *d) {
  for (int i = 1; i <= n; i++) d[i] = inf;
  d[S] = 0;
  q.push(make_pair(0, S));
  while (!q.empty()) {
    pair<long long, int> x = q.top();
    q.pop();
    if (x.first != -d[x.second]) continue;
    for (int i = u[x.second]; i; i = e[i].pre)
      if (d[x.second] + e[i].c < d[e[i].to])
        d[e[i].to] = d[x.second] + e[i].c,
        q.push(make_pair(-d[e[i].to], e[i].to));
  }
}
int a[N], b[N], l[N], r[N];
int main() {
  int m, k;
  scanf("%d%d%d", &n, &m, &k);
  int s1, s2;
  scanf("%d%d%d", &s1, &s2, &T);
  for (int i = 1; i <= m; i++) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    ins(a, b, c);
  }
  for (int i = 1; i <= k; i++) {
    scanf("%d%d%d%d", &a[i], &b[i], &l[i], &r[i]);
    ins(a[i], b[i], r[i]);
  }
  dij(s1, d1), dij(s2, d2);
  bool flag = true;
  while (flag) {
    flag = false;
    for (int i = 1; i <= k; i++)
      if (!ch[i] && d1[a[i]] <= d2[a[i]])
        ins(a[i], b[i], l[i]), flag = true, ch[i] = true;
    if (flag) dij(s1, d1), dij(s2, d2);
  }
  if (d1[T] < d2[T])
    printf("WIN\n");
  else if (d1[T] == d2[T])
    printf("DRAW\n");
  else {
    printf("LOSE");
    return 0;
  }
  for (int i = 1; i <= k; i++)
    if (ch[i])
      printf("%d ", l[i]);
    else
      printf("%d ", r[i]);
  printf("\n");
  return 0;
}
