#include <bits/stdc++.h>
using namespace std;
int n, m, k;
int playNim(vector<int> &piles) {
  int nimSum = 0, newVal;
  for (int i = piles.size() - 1; i >= 0; --i) {
    newVal = nimSum ^ piles[i];
    if (piles[i] > newVal && (piles[i] - newVal) <= k) {
      piles[i] = newVal;
      return !playNim(piles);
    }
  }
  return 0;
}
int main() {
  string line;
  int a, b;
  bool firstCanMove = false, secondCanMove = false;
  bool firstMovesInfinitely = false, secondMovesInfinitely = false;
  vector<string> input;
  vector<int> piles;
  cin >> n >> m >> k;
  piles.resize(n);
  input.resize(n);
  for (int i = 0; i < n; ++i) {
    cin >> input[i];
    for (int j = m - 1; j >= 0; --j) {
      if (input[i][j] == 'G') {
        if ((j > 0 && input[i][j - 1] == '-') ||
            (j < m - 1 && input[i][j + 1] == '-'))
          firstCanMove = true;
      } else if (input[i][j] == 'R') {
        if ((j > 0 && input[i][j - 1] == '-') ||
            (j < m - 1 && input[i][j + 1] == '-'))
          secondCanMove = true;
      }
    }
  }
  if (firstCanMove) {
    if (secondCanMove) {
      for (int i = 0; i < n; ++i) {
        a = input[i].find('G');
        b = input[i].find('R');
        if (a != string::npos) {
          if (b == string::npos) {
            firstMovesInfinitely = true;
          } else
            piles[i] = max(a, b) - min(a, b) - 1;
        } else if (b != string::npos) {
          secondMovesInfinitely = true;
        }
      }
      if (!secondMovesInfinitely) {
        for (int t = sizeof(int) * 8 - 1; t >= 0; --t) {
          a = 0;
          for (int i = piles.size() - 1; i >= 0; --i) {
            a += ((piles[i] & (1 << t)) == 0 ? 0 : 1);
          }
          if (a % (k + 1)) {
            cout << "First" << endl;
            return 0;
          }
        }
      }
      cout << (firstMovesInfinitely ? "Draw" : "Second") << endl;
    } else
      cout << "First" << endl;
  } else
    cout << "Second" << endl;
  return 0;
}
