public boolean optimal(int[] bowl, int bowlId, int round)
    {
    	//System.out.println("Inside Optimal..");
    	int bowlScore=0;
    	bowlScore = buildDistribution(bowl, bowlId, round);
		
    	if (maxBowls[round] == 2) {
			scoresSeen.add(bowlScore);
			len[round]++;
    		return Math.random()>0.5;
    	}
    	
    	if (maxBowls[round] == 3) {
			//System.out.println("inside max bowls = 3");
			if (bowlsSeen[round] >= 2) {
				int maxScore = getMaxScore(scoresSeen, start[round], len[round]);
				scoresSeen.add(bowlScore);
				len[round]++;
				//System.out.println("Max Score: "+maxScore);
				return maxScore <= bowlScore;
			}
			else
			{
				//System.out.println("Want to pass... "+"true");
				scoresSeen.add(bowlScore);
				len[round]++;
				return false;
			}
		}
		//System.out.println("n/e value: "+Math.floor((double)(maxBowls[round])/(double)(Math.E)));
	
		if (Math.floor((double)(maxBowls[round])/(double)(Math.E)) < bowlsSeen[round]) {
			//System.out.println("inside general case");
			int maxScore = getMaxScore(scoresSeen, start[round], len[round]);
			scoresSeen.add(bowlScore);
			len[round]++;
			//System.out.println("Max Score: "+maxScore);
			return maxScore <= bowlScore;
		}
		else {
			//System.out.println("else...");
			scoresSeen.add(bowlScore);
			len[round]++;
			//System.out.println("Want to pass... "+"true");
			return false;
		}		
	}