#include <bits/stdc++.h>
using namespace std;
const long long N = 11111;
long long n, m, k, s1, s2, f;
vector<pair<long long, long long> > G[N];
long long d1[N], d2[N];
struct Edge {
  long long v, u, w, type, val, l, r;
} E[N];
void Input();
void Try_Win();
void SP1(long long v);
void SP2(long long v);
void Try_Draw();
void Lose();
int main() {
  ios::sync_with_stdio(0), cin.tie(0);
  Input();
  Try_Win();
  Try_Draw();
  Lose();
  return (0);
}
void Input() {
  cin >> n >> m >> k >> s1 >> s2 >> f;
  for (int i = 1; i <= m; i++) {
    cin >> E[i].v >> E[i].u >> E[i].w;
    E[i].type = 1;
    G[E[i].v].push_back({E[i].u, i});
  }
  for (int i = m + 1; i < m + k + 1; i++) {
    cin >> E[i].v >> E[i].u >> E[i].l >> E[i].r;
    E[i].w = E[i].r;
    G[E[i].v].push_back({E[i].u, i});
  }
}
void Try_Win() {
  long long ok = 1;
  while (ok--) {
    memset(d1, 63, sizeof(d1));
    memset(d2, 63, sizeof(d2));
    SP1(s1);
    SP2(s2);
    for (int i = m + 1; i <= m + k + 1; i++) {
      if (d1[E[i].v] < d2[E[i].v] && E[i].w != E[i].l) {
        E[i].w = E[i].l;
        ok = 1;
        break;
      }
    }
  }
  if (d1[f] < d2[f]) {
    cout << "WIN\n";
    for (int i = m + 1; i < m + k + 1; i++) cout << E[i].w << ' ';
    exit(0);
  }
}
void SP1(long long sor) {
  set<pair<long long, long long> > second;
  d1[sor] = 0;
  for (int i = 1; i <= n; i++) second.insert({d1[i], i});
  while (second.size()) {
    auto x = *second.begin();
    long long v = x.second, dis = x.first;
    for (auto u : G[v])
      if (d1[u.first] > dis + E[u.second].w) {
        second.erase({d1[u.first], u.first});
        d1[u.first] = E[u.second].w + dis;
        second.insert({d1[u.first], u.first});
      }
    second.erase(x);
  }
}
void SP2(long long sor) {
  set<pair<long long, long long> > second;
  d2[sor] = 0;
  for (int i = 1; i <= n; i++) second.insert({d2[i], i});
  while (second.size()) {
    auto x = *second.begin();
    long long v = x.second, dis = x.first;
    for (auto u : G[v])
      if (d2[u.first] > dis + E[u.second].w) {
        second.erase({d2[u.first], u.first});
        d2[u.first] = E[u.second].w + dis;
        second.insert({d2[u.first], u.first});
      }
    second.erase(x);
  }
}
void Try_Draw() {
  long long ok = 1;
  while (ok--) {
    memset(d1, 63, sizeof(d1));
    memset(d2, 63, sizeof(d2));
    SP1(s1);
    SP2(s2);
    for (int i = m + 1; i < m + k + 1; i++) {
      if (d1[E[i].v] <= d2[E[i].v] && E[i].w != E[i].l) {
        E[i].w = E[i].l;
        ok = 1;
        break;
      }
    }
  }
  if (d1[f] == d2[f]) {
    cout << "DRAW\n";
    for (int i = m + 1; i < m + k + 1; i++) cout << E[i].w << ' ';
    exit(0);
  }
}
void Lose() {
  cout << "LOSE\n";
  exit(0);
}
