Fox Ciel has some flowers: r red flowers, g green flowers and b blue flowers. She wants to use these flowers to make several bouquets. There are 4 types of bouquets:

  * To make a "red bouquet", it needs 3 red flowers. 
  * To make a "green bouquet", it needs 3 green flowers. 
  * To make a "blue bouquet", it needs 3 blue flowers. 
  * To make a "mixing bouquet", it needs 1 red, 1 green and 1 blue flower. 



Help Fox Ciel to find the maximal number of bouquets she can make.

Input

The first line contains three integers r, g and b (0 ≤ r, g, b ≤ 109) — the number of red, green and blue flowers.

Output

Print the maximal number of bouquets Fox Ciel can make.

Examples

Input

3 6 9


Output

6


Input

4 4 4


Output

4


Input

0 0 0


Output

0

Note

In test case 1, we can make 1 red bouquet, 2 green bouquets and 3 blue bouquets.

In test case 2, we can make 1 red, 1 green, 1 blue and 1 mixing bouquet.
#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T a, T b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
template <typename T>
void read(T &x) {
  register T c = getchar();
  x = 0;
  int t = 0;
  if (c == '-') t = 1, c = getchar();
  for (; (c < 48 || c > 57); c = getchar())
    ;
  for (; c > 47 && c < 58; c = getchar()) {
    x = (x << 1) + (x << 3) + c - 48;
  }
  if (t) x = -x;
}
template <typename T>
T pow(T x, T y) {
  T ans = 1;
  while (y > 0) {
    if (y % 2 == 1) ans = (ans * x) % 1000000007;
    y /= 2;
    x = (x * x) % 1000000007;
  }
  return ans;
}
template <typename T>
long long int roundp(T x) {
  long long int ans = x;
  if (x - floor(x) <= 0.001)
    ans = floor(x);
  else if (ceil(x) - x <= 0.001)
    ans = ceil(x);
  return ans;
}
int main() {
  int r, g, b;
  cin >> r >> g >> b;
  int ct = 0;
  ct = r / 3 + b / 3 + g / 3;
  int mini = min(r, min(g, b));
  if (mini >= 1) {
    ct = max(ct, 1 + (r - 1) / 3 + (g - 1) / 3 + (b - 1) / 3);
  }
  if (mini >= 2) {
    ct = max(ct, 2 + (r - 2) / 3 + (b - 2) / 3 + (g - 2) / 3);
  }
  cout << ct;
}
