#include <bits/stdc++.h>
using namespace std;
inline int read() {
  char ch = getchar();
  int x = 0, f = 1;
  for (; ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar())
    x = (x << 1) + (x << 3) + ch - '0';
  return x * f;
}
struct ed {
  int u, to, next, w;
} edge[10100 + 10];
int tot = 0, head[10000 + 10];
int l[10100 + 10], r[10100 + 10], pos[10100 + 10], s1, s2, t, n, m, k;
inline void adde(int u, int v, int w) {
  edge[++tot].to = v;
  edge[tot].u = u;
  edge[tot].next = head[u];
  edge[tot].w = w;
  head[u] = tot;
}
struct node {
  int id;
  long long val;
  node() {}
  node(int iid, long long vval) {
    id = iid;
    val = vval;
  }
  bool friend operator<(node a, node b) { return a.val > b.val; }
};
priority_queue<node> q;
long long dis1[10000 + 10], dis2[10000 + 10];
bool vis[10000 + 10];
void DJ(int s, long long *dis) {
  while (!q.empty()) q.pop();
  for (register int i = 1; i <= n; ++i) dis[i] = 0x3f3f3f3f3f3f3f3fll;
  memset(vis, 0, sizeof(vis));
  dis[s] = 0;
  q.push(node(s, 0));
  node u;
  int v;
  while (!q.empty()) {
    u = q.top();
    q.pop();
    if (vis[u.id]) continue;
    vis[u.id] = 1;
    for (register int i = head[u.id]; i; i = edge[i].next) {
      v = edge[i].to;
      if (dis[v] > dis[u.id] + edge[i].w) {
        dis[v] = dis[u.id] + edge[i].w;
        q.push(node(v, dis[v]));
      }
    }
  }
}
int main() {
  n = read(), m = read(), k = read();
  s1 = read(), s2 = read(), t = read();
  int a, b, c;
  for (register int i = 1; i <= m; ++i) {
    a = read(), b = read(), c = read();
    adde(a, b, c);
  }
  for (register int i = 1; i <= k; ++i) {
    a = read(), b = read();
    l[i] = read(), r[i] = read();
    adde(a, b, r[i]);
    pos[i] = tot;
  }
  bool flag = 1;
  while (flag) {
    flag = 0;
    DJ(s1, dis1);
    DJ(s2, dis2);
    for (register int i = 1; i <= k; ++i) {
      int now = pos[i];
      if (dis1[edge[now].u] <= dis2[edge[now].u] && edge[now].w != l[i]) {
        edge[now].w = l[i];
        flag = 1;
      }
    }
  }
  DJ(s1, dis1);
  DJ(s2, dis2);
  if (dis1[t] < dis2[t]) {
    puts("WIN");
    for (register int i = 1; i <= k; ++i) printf("%d ", edge[pos[i]].w);
  } else if (dis1[t] == dis2[t]) {
    puts("DRAW");
    for (register int i = 1; i <= k; ++i) printf("%d ", edge[pos[i]].w);
  } else
    puts("LOSE");
  return 0;
}
