#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define IO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int sz = 2e3 + 9;
const ll mod =  1e9 + 7;
const ll inf = 1e9;
const double eps = 1e-6;
void test()
{
    int n,t;scanf("%d%d", &n, &t);
    ll x[n];
    for(int i=0;i<n;i++)
        scanf("%lld", &x[i]);
    int m = n - (n / 2),temp = n;
    vector<int> a(temp),b(temp);
    n/=2;
    for(int i=0;i < n;i++)
        a[i] = x[i];
    for(int i = n,p = 0;i < temp;i++,p++)
        b[p] = x[i];
    vector<ll> s(1<<n),s2(1<<m);
    for(int i = 0;i < (1<<n);i++)
    {
        ll sum=0;
        for(int j=0;j<n;j++)
        {
            if(i & (1<<j))
                sum+=a[j];
        }
        s[i] = sum;
    }
    for(int i=0;i<(1<<m);i++)
    {
        ll sum = 0;
        for(int j=0;j<m;j++)
        {
            if(i & (1<<j))
                sum+=b[j];
        }
        s2[i] = sum;
    }
    ll ans = 0;
    sort(s2.begin(),s2.end());
    for(ll i : s)
    {
        if(i<=t)
        {
            int it = (int)(upper_bound(s2.begin(),s2.end(),t - i) - s2.begin());
            if(it)
                ans = max(ans,i + s2[it - 1]);
        }
    }
    printf("%lld", ans);
}
int main()
{
    int cases = 1;
//    cin>>cases;
    while(cases--)
        test();
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef multiset<string> mss;
typedef map<int, int> mii;
typedef set<string> ss;
typedef vector<int> vi;
typedef vector<string> vs;
// -------------------------------------------------
// https://atcoder.jp/contests/abc201/tasks/abc201_d
// -------------------------------------------------

int main(void){

	int H, W;
	cin >> H >> W;

  // int s[2000][2000];
  vs s(H);
  for(int h = 0; h < H; h++) {
    string _s;
    cin >> _s;
    s[h] = _s;
  }

  int dp[H][W];
  for(int h = 0; h < H; h++) {
    for(int w = 0; w < W; w++) {
      dp[h][w] = 0;
    }
  }

  auto f = [](char c) {
    return c == '+' ? 1 : -1;
  };

  for(int h = H - 1; h >= 0; h--) {
    for(int w = W - 1; w >= 0; w--) {
      if(h == H - 1 && w == W - 1) {
        dp[h][w] = 0;
        continue;
      }
      // Aoki
      if((h + w) % 2) {
        dp[h][w] = 1e9;
        if(h + 1 < H) dp[h][w] = min(dp[h][w], dp[h + 1][w] - f(s[h + 1][w]));
        if(w + 1 < W) dp[h][w] = min(dp[h][w], dp[h][w + 1] - f(s[h][w + 1]));
      // Takahashi
      } else {
        dp[h][w] = -1e9;
        if(h + 1 < H) dp[h][w] = max(dp[h][w], dp[h + 1][w] + f(s[h + 1][w]));
        if(w + 1 < W) dp[h][w] = max(dp[h][w], dp[h][w + 1] + f(s[h][w + 1]));
      }
  	}
  }

  for(int h = 0; h < H; h++) {
    for(int w = 0; w < W; w++) {
      // cout << "dp[" << h << "][" << w << "]:" << dp[h][w] << endl;
    }
  }

  if(dp[0][0] > 0) cout << "Takahashi" << endl;
  else if(dp[0][0] < 0) cout << "Aoki" << endl;
  else cout << "Draw" << endl;

}
