#include <bits/stdc++.h>
using namespace std;
const int N = 10500;
struct edge {
  int to, next, v;
} e[N];
int n, m, k, S1, S2, T;
int x[505], y[505], l[505], r[505];
int head[N], tot, vis[N];
long long d1[N], d2[N];
priority_queue<pair<long long, long long> > Q;
void add(int x, int y, int v) {
  e[++tot] = (edge){y, head[x], v};
  head[x] = tot;
}
void SSSP(int S, long long *dis) {
  for (int i = (int)(1); i <= (int)(n); i++) dis[i] = 1ll << 60, vis[i] = 0;
  dis[S] = 0;
  Q.push(pair<long long, long long>(0, S));
  while (!Q.empty()) {
    int x = Q.top().second;
    Q.pop();
    if (vis[x]) continue;
    vis[x] = 1;
    for (int i = head[x]; i; i = e[i].next)
      if (dis[e[i].to] > dis[x] + e[i].v) {
        dis[e[i].to] = dis[x] + e[i].v;
        Q.push(pair<long long, long long>(-dis[e[i].to], e[i].to));
      }
  }
}
bool check(int v) {
  for (int i = (int)(1); i <= (int)(k); i++) e[i + m].v = r[i];
  for (;;) {
    SSSP(S1, d1);
    SSSP(S2, d2);
    if (d1[T] + v <= d2[T]) return 1;
    bool fl = 0;
    for (int i = (int)(1); i <= (int)(k); i++)
      if (d1[x[i]] + v <= d2[x[i]] && e[m + i].v == r[i])
        e[m + i].v = l[i], fl = 1;
    if (!fl) return 0;
  }
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  scanf("%d%d%d", &S1, &S2, &T);
  for (int i = (int)(1); i <= (int)(m); i++) {
    int x, y, v;
    scanf("%d%d%d", &x, &y, &v);
    add(x, y, v);
  }
  for (int i = (int)(1); i <= (int)(k); i++) {
    scanf("%d%d%d%d", &x[i], &y[i], &l[i], &r[i]);
    add(x[i], y[i], r[i]);
  }
  if (check(1)) {
    printf("WIN\n");
    for (int i = (int)(1); i <= (int)(k); i++) printf("%d ", e[i + m].v);
    exit(0);
  }
  if (check(0)) {
    printf("DRAW\n");
    for (int i = (int)(1); i <= (int)(k); i++) printf("%d ", e[i + m].v);
    exit(0);
  }
  puts("LOSE");
}
