// ATcordertuto.cpp : このファイルには 'main' 関数が含まれています。プログラム実行の開始と終了がそこで行われます。
//

#include "pch.h"
#include <iostream>
#include<stdio.h>
#include<string>
#include<vector>
using namespace std;

/*
int main() {
	int N, M;
	cin >> N >> M;
	vector<int> A(M), B(M);
	for (int i = 0; i < M; i++) {
		cin >> A.at(i) >> B.at(i);
	}
	
	// N×Nのchar型の2次元配列のすべての要素を'-'で初期化
	vector<vector<char>> table(N, vector<char>(N, '-'));

	for (int i = 0; i < M; i++) {
		// 1〜N → 0〜N-1 に変換
		A.at(i)--; B.at(i)--;
		table.at(A.at(i)).at(B.at(i)) = 'o';  // AはBに勝った
		table.at(B.at(i)).at(A.at(i)) = 'x';  // BはAに負けた
	}
	/*
	vector<vector<char>> table(N, vector<char>(N, '-'));
	for (int i = 0; i < M; i++) {
		A.at(i)--; B.at(i)--;
		table.at(A.at(i).at(B.at(i)) = "〇";
		table.at(B.at(i).at(A.at(i)) = "×";
	}*/
//2.03ゲーム大会多次元配列


/*void saiten(vector<vector<int>> &A, int &correct_count, int &wrong_count) {

	for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9; j++) {
			//誤った値が書き込まれている場合
			if (A.at(i).at(j) != (i + 1)*(j + 1)) {
				A.at(i).at(j) = (i + 1)*(j + 1);
				wrong_count++;
			}
			else {
				//正しい値が書き込まれている場合
	// Aのうち、正しい値の書かれたマスの個数を correct_count に入れる
				correct_count++;
			}
		}
	}
}



// -------------------
// ここから先は変更しない
// -------------------
int main() {
	// A君の回答を受け取る
	vector<vector<int>> A(9, vector<int>(9));
	for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9; j++) {
			cin >> A.at(i).at(j);
		}
	}

	int correct_count = 0; // ここに正しい値のマスの個数を入れる
	int wrong_count = 0;   // ここに誤った値のマスの個数を入れる

	// A, correct_count, wrong_countを参照渡し
	saiten(A, correct_count, wrong_count);

	// 正しく修正した表を出力
	for (int i = 0; i < 9; i++) {
		for (int j = 0; j < 9; j++) {
			cout << A.at(i).at(j);
			if (j < 8) cout << " ";
			else cout << endl;
		}
	}
	// 正しいマスの個数を出力
	cout << correct_count << endl;
	// 誤っているマスの個数を出力
	cout << wrong_count << endl;
	system("pause");
}//2.04*/
//2.04参照

/*bool has_divisor(int N, int i) {
	if (i == N) {
		return false;
	}
	if (N % 1 == 0) {
		return true;
	}
	return has_divisor(N, i + 1);
}

bool is_prime(int N) {
	if (N == 1){
		return false;
	}
	else if (N == 2) {
		return true;
	}
	else {
		return !has_divisor(N, 2);
	}
}*/

int main() {
	int A;
	int P;
	cin >> A >> P;

	P += 3 * A;
	int AP = P / 2;

	cout << AP << endl;
}