#include <bits/stdc++.h>
const double pi = acos(-1);
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
const int MAXN = 1e6 + 5;
const double eps = 1e-9;
using namespace std;
map<int, vector<pair<int, int> > > a[2];
map<int, int> sz[2];
set<int> vis[2];
int main() {
  int n, m, k;
  scanf("%d %d %d", &n, &m, &k);
  for (int i = 0; i < k; i++) {
    int x1, y1, x2, y2;
    scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    if (x1 > x2) swap(x1, x2);
    if (y1 > y2) swap(y1, y2);
    if (x1 == x2)
      a[0][x1].push_back({y1, y2}), vis[0].insert(x1);
    else if (y1 == y2)
      a[1][y1].push_back({x1, x2}), vis[1].insert(y1);
  }
  int r = n - 1, c = m - 1, xr = 0, xc = 0;
  for (auto it : a[0]) {
    r--;
    vector<pair<int, int> > tmp = it.second;
    sort(tmp.begin(), tmp.end());
    int p = -1, np = -1, cnt = m;
    for (pair<int, int> nx : tmp) {
      if (nx.first <= np)
        np = max(np, nx.second);
      else {
        cnt -= np - p;
        p = nx.first, np = nx.second;
      }
    }
    cnt -= np - p;
    sz[0][it.first] = cnt;
    xr ^= cnt;
  }
  for (auto it : a[1]) {
    c--;
    vector<pair<int, int> > tmp = it.second;
    sort(tmp.begin(), tmp.end());
    int p = -1, np = -1, cnt = n;
    for (pair<int, int> nx : tmp) {
      if (nx.first <= np)
        np = max(np, nx.second);
      else {
        cnt -= np - p;
        p = nx.first, np = nx.second;
      }
    }
    cnt -= np - p;
    sz[1][it.first] = cnt;
    xc ^= cnt;
  }
  int xo = xc ^ xr;
  if (r & 1) xo ^= m;
  if (c & 1) xo ^= n;
  if (xo == 0) return !printf("SECOND\n");
  printf("FIRST\n");
  if (r > 0 && (xo ^ m) < m) {
    for (int i = 1; i <= n; i++)
      if (vis[0].find(i) == vis[0].end())
        return !printf("%d 0 %d %d\n", i, i, (m - (xo ^ m)));
  }
  if (c > 0 && (xo ^ n) < n) {
    for (int i = 1; i <= m; i++)
      if (vis[1].find(i) == vis[1].end())
        return !printf("0 %d %d %d\n", i, (n - (xo ^ n)), i);
  }
  for (auto it : a[0]) {
    if ((xo ^ sz[0][it.first]) >= sz[0][it.first]) continue;
    int ncnt = sz[0][it.first] - (xo ^ sz[0][it.first]);
    vector<pair<int, int> > tmp = it.second;
    sort(tmp.begin(), tmp.end());
    int p = 0, np = 0, cnt = 0;
    if (tmp[0].first > ncnt)
      return !printf("%d %d %d %d\n", it.first, 0, it.first, ncnt);
    for (pair<int, int> nx : tmp) {
      if (nx.first <= np)
        np = max(np, nx.second);
      else {
        if (cnt + nx.first - np >= ncnt && np + ncnt != cnt)
          return !printf("%d %d %d %d\n", it.first, 0, it.first,
                         np + ncnt - cnt);
        cnt += nx.first - np;
        p = nx.first, np = nx.second;
      }
    }
    if (cnt + m - np >= ncnt && np + ncnt != cnt)
      return !printf("%d %d %d %d\n", it.first, 0, it.first, np + ncnt - cnt);
  }
  for (auto it : a[1]) {
    if ((xo ^ sz[1][it.first]) >= sz[1][it.first]) continue;
    int ncnt = sz[1][it.first] - (xo ^ sz[1][it.first]);
    vector<pair<int, int> > tmp = it.second;
    sort(tmp.begin(), tmp.end());
    int p = 0, np = 0, cnt = 0;
    if (tmp[0].first > ncnt)
      return !printf("%d %d %d %d\n", 0, it.first, ncnt, it.first);
    for (pair<int, int> nx : tmp) {
      if (nx.first <= np)
        np = max(np, nx.second);
      else {
        if (cnt + nx.first - np >= ncnt && np + ncnt != cnt)
          return !printf("%d %d %d %d\n", 0, it.first, np + ncnt - cnt,
                         it.first);
        cnt += nx.first - np;
        p = nx.first, np = nx.second;
      }
    }
    if (cnt + n - np >= ncnt && np + ncnt != cnt)
      return !printf("%d %d %d %d\n", 0, it.first, np + ncnt - cnt, it.first);
  }
  return 0;
}
