import std.algorithm; import std.array; import std.conv; import std.math; import std.range; import std.stdio; import std.string; import std.typecons; T read(T)() { return readln.chomp.to!T; } T[] reads(T)() { return readln.split.to!(T[]); } alias readint = read!int; alias readints = reads!int; int calc(int r, int g, int b) { // n 個のアクセサリーが作れるか bool canMake(int n) { int k = 0; foreach (x; [r - n, g - n, b - n]) { k += x >= 0 ? x / 2 // 2 個単位で他の石に交換できる : x; // x だけ足りない } return k >= 0; } int ans = 0; int lo = 0; int hi = max(r, g, b); while (lo <= hi) { int m = (lo + hi) / 2; if (canMake(m)) { ans = max(ans, m); lo = m + 1; } else { hi = m - 1; } } return ans; } void main() { auto rgb = readints; auto ans = calc(rgb[0], rgb[1], rgb[2]); writeln(ans); }