#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
map<int, vector<pair<int, int> > > rows, columns;
int n, m, k;
void read() {
  cin >> n >> m >> k;
  for (int i = 1; i <= k; i++) {
    int x1, y1, x2, y2;
    cin >> x1 >> y1 >> x2 >> y2;
    if (x1 == x2)
      rows[x1].push_back({min(y1, y2), max(y1, y2)});
    else
      columns[y1].push_back({min(x1, x2), max(x1, x2)});
  }
}
int can(int x, int s) {
  int s1 = s ^ x;
  if (s1 <= x - 1)
    return s1;
  else
    return -1;
}
void solve() {
  int ans = 0;
  for (auto &i : rows) {
    auto curr = i.second;
    sort(curr.begin(), curr.end());
    vector<pair<int, int> > v;
    int l = curr[0].first, r = curr[0].second;
    for (int j = 1; j < (int)curr.size(); j++) {
      if (curr[j].first > r) {
        v.push_back({l, r});
        l = curr[j].first;
        r = curr[j].second;
      } else
        r = max(r, curr[j].second);
    }
    v.push_back({l, r});
    int left = m;
    for (auto j : v) left -= j.second - j.first;
    ans ^= left;
    i.second = v;
  }
  for (auto &i : columns) {
    auto curr = i.second;
    sort(curr.begin(), curr.end());
    vector<pair<int, int> > v;
    int l = curr[0].first, r = curr[0].second;
    for (int j = 1; j < (int)curr.size(); j++) {
      if (curr[j].first > r) {
        v.push_back({l, r});
        l = curr[j].first;
        r = curr[j].second;
      } else
        r = max(r, curr[j].second);
    }
    v.push_back({l, r});
    int left = n;
    for (auto j : v) left -= j.second - j.first;
    ans ^= left;
    i.second = v;
  }
  if ((n - 1 - (int)rows.size()) & 1) ans ^= m;
  if ((m - 1 - (int)columns.size()) & 1) ans ^= n;
  if (ans == 0) {
    cout << "SECOND" << '\n';
    return;
  }
  cout << "FIRST" << '\n';
  int first_row = -1, first_column = -1;
  int last = 0;
  for (auto i : rows) {
    if (i.first > last + 1) {
      first_row = i.first - 1;
      break;
    }
    last = i.first;
  }
  if (last != n - 1 && first_row == -1) first_row = n - 1;
  last = 0;
  for (auto i : columns) {
    if (i.first > last + 1) {
      first_column = i.first - 1;
      break;
    }
    last = i.first;
  }
  if (last != m - 1 && first_column == -1) first_column = m - 1;
  int x = can(m, ans);
  if (x != -1 && first_row != -1) {
    cout << first_row << " " << 0 << " " << first_row << " " << m - x << '\n';
    return;
  }
  x = can(n, ans);
  if (x != -1 && first_column != -1) {
    cout << 0 << " " << first_column << " " << n - x << " " << first_column
         << '\n';
    return;
  }
  for (auto i : rows) {
    int left = m;
    for (auto j : i.second) left -= j.second - j.first;
    int x = can(left, ans);
    if (x != -1) {
      int sum = 0;
      last = 0;
      for (auto j : i.second) {
        sum += j.first - last;
        if (sum >= left - x) {
          cout << i.first << " " << 0 << " " << i.first << " "
               << j.first - (sum - left + x) << '\n';
          return;
        }
        last = j.second;
      }
      if (sum < left - x)
        cout << i.first << " " << 0 << " " << i.first << " "
             << last + (left - x - sum) << '\n';
      return;
    }
  }
  for (auto i : columns) {
    int left = n;
    for (auto j : i.second) left -= j.second - j.first;
    int x = can(left, ans);
    if (x != -1) {
      int sum = 0;
      last = 0;
      for (auto j : i.second) {
        sum += j.first - last;
        if (sum >= left - x) {
          cout << 0 << " " << i.first << " " << j.first - (sum - left + x)
               << " " << i.first << '\n';
          return;
        }
        last = j.second;
      }
      if (sum < left - x)
        cout << 0 << " " << i.first << " " << last + (left - x - sum) << " "
             << i.first << '\n';
      return;
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  read();
  solve();
}
