Problem: Problem statement

Two players are playing the game. The rules of the game will be described below.

There is a board of $ N × N $ squares, and each square has the number $ X_ {i, j} $ ($ 1 \ leq i, j \ leq N $) written on it. The first move and the second move alternately select hands and accumulate points. The first move has $ F $ points and the second move has $ 0 $ points.

$ t $ Shows the player's actions on the turn ($ 1 \ leq t \ leq 2N $).

1. If you lose, no matter what move you and your opponent choose, immediately declare the loss and end the game.
2. Choose a number from $ 1,2, ..., N $ that you have never chosen and use it as $ Y_t $.
1. When the first move (that is, $ t $ is odd) and $ t> 1 $, the first move gets $ X_ {Y_ {t}, Y_ {t-1}} $ points. When $ t = 1 $, there is no change in the score of the first move.
2. When it is the second move (that is, $ t $ is an even number), the second player gets $ X_ {Y_ {t-1}, Y_ {t}} $ points.
3. When $ t = 2N $, win / loss judgment is made and the game ends. If the player who has the most points wins and the points are the same, it is a draw.
4. End the turn and give your opponent a turn.



The first move and the second move are selected based on the following criteria.

1. If there is a move that you can win, choose that move. If there are multiple moves that you can win, choose the move that will end the game in the shortest time.
2. If you don't have a winning move, choose a draw if you have one.
3. Choose a move that will end the game at the longest when you have only a losing move.



Find out the outcome of the game and how many turns the game will end when the first move and the second move choose their moves based on these criteria.

Constraint

* $ 1 \ leq N \ leq 8 $
* $ -10 ^ 5 \ leq F \ leq 10 ^ 5 $
* $ -10 ^ 5 \ leq X_ {i, j} \ leq 10 ^ 5 $



input

Input follows the following format. All given numbers are integers.


$ N $ $ F $
$ X_ {1,1} $ $ X_ {1,2} $ $ ... $ $ X_ {1, N} $
$ X_ {2,1} $ $ X_ {2,2} $ $ ... $ $ X_ {2, N} $
$ ... $
$ X_ {N, 1} $ $ X_ {N, 2} $ $ ... $ $ X_ {N, N} $

output

Output "First" if the first move wins, "Second" if the second move wins, and "Draw" if it is a draw. Print on the second line how many turns the game will end.

Examples

Input

2 0
1 3
1 1


Output

Second
3


Input

2 100
0 0
0 0


Output

First
2


Input

2 5
3 4
7 6


Output

Draw
4

Solution (in CPP):

Solution:
#include<iostream>
#include<sstream>
#include<vector>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<complex>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cassert>
using namespace std;

#define rep(i,n) for(int i=0;i<(int)n;i++)
#define fr(i,c) for(__typeof(c.begin()) i=c.begin();i!=c.end();i++)
#define pb push_back
#define mp make_pair
#define all(c) c.begin(),c.end()
#define dbg(x) cerr<<#x<<" = "<<(x)<<endl

typedef vector<int> vi;
typedef pair<int,int> pi;
typedef long long ll;
const int inf=(int)1e9;
const double EPS=1e-9, INF=1e12;

inline void takemax(int &a,int b){if(a==-inf||a<b)a=b;}

int n,f,x[8][8];
int dp1[1<<16][8],dp2[1<<16][8];
int rec(int b1,int b2,int last,int pt,int turn,int a,int b){
	if(turn==2*n+1){
		if(pt==0)return inf/2;
		if(pt>0)return inf-turn;
		return turn;
	}
	if(turn%2==1){
		if(pt+dp1[b1<<n|b2][last]<0)return turn;
		rep(i,n)if(!(b1&1<<i)){
			a=max(a,rec(b1|1<<i,b2,i,pt+(turn>1?x[i][last]:0),turn+1,a,b));
			if(a>=b)return b;
		}
		return a;
	}
	else{
		if(pt-dp2[b1<<n|b2][last]>0)return inf-turn;
		rep(i,n)if(!(b2&1<<i)){
			b=min(b,rec(b1,b2|1<<i,i,pt-x[last][i],turn+1,a,b));
			if(a>=b)return a;
		}
		return b;
	}
}


int main(){
	cin>>n>>f;
	rep(i,n)rep(j,n)cin>>x[i][j];
	rep(i,1<<2*n)rep(j,n)dp1[i][j]=dp2[i][j]=-inf;
	rep(j,n)dp1[(1<<2*n)-1][j]=dp2[(1<<2*n)-1][j]=0;
	
	for(int i=(1<<2*n)-1;i>=0;i--){
		int cnt=__builtin_popcount(i);
		if(cnt%2==0){
			rep(j,n)rep(k,n)if(!(i&1<<k+n))
			takemax(dp1[i][j],dp1[i^1<<k+n][k]+(cnt?x[k][j]:0)),
			takemax(dp2[i][j],dp2[i^1<<k+n][k]-(cnt?x[k][j]:0));
		}
		else{
			rep(j,n)rep(k,n)if(!(i&1<<k))
			takemax(dp1[i][j],dp1[i^1<<k][k]-x[j][k]),
			takemax(dp2[i][j],dp2[i^1<<k][k]+x[j][k]);
		}
	}
	
	int ans=rec(0,0,0,f,1,-inf,inf);
	if(ans==inf/2)cout<<"Draw\n"<<n*2<<endl;
	else if(ans>inf/2)cout<<"First\n"<<inf-ans<<endl;
	else cout<<"Second\n"<<ans<<endl;
	
	return 0;
}