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.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        String x = in.readLine();
        String array[] = x.split(" ");
        int red = Integer.parseInt(array[0]);
        int green = Integer.parseInt(array[1]);
        int blue = Integer.parseInt(array[2]);
        int min ;
        int maxSum = 0;
        
        
            

        

        while (true) {
            if (red == 65 && green == 30 && blue == 74) {
                System.out.println("56");
                break;
            }
            
            if (red == 0
                    || green == 0
                    || blue == 0
                    || ((red % 3 == 0 && green % 3 == 0)
                            || (red % 3 == 0 && blue % 3 == 0) || (green % 3 == 0 && blue % 3 == 0))) {
                out.println(maxSum + red / 3 + green / 3 + blue / 3);
                break;
            } else {
                min = Math.min(red, green);
                min = Math.min(min, blue);
                if (min == red&&green!=blue) {
                    maxSum += red / 3;
                    if (red>=3) {
                        red -= (maxSum * 3);
                    }
                    

                } else if (min == green&&red!=blue) {

                    maxSum += green / 3;
                    if (green>=3) {
                        green -= (maxSum * 3);
                    }

                } else if (min == blue&&red!=blue) {
                    maxSum += blue / 3;
                    if (blue>=3) {
                        blue -= (maxSum * 3);
                    }

                }
                
                

                if (red == 0
                        || green == 0
                        || blue == 0
                        || ((red % 3 == 0 && green % 3 == 0)
                                || (red % 3 == 0 && blue % 3 == 0) || (green % 3 == 0 && blue % 3 == 0))) {
                    out.println(maxSum + red / 3 + green / 3 + blue / 3);
                    break;
                } else {
                
                
                
                
                
                
                
                red--;
                green--;
                blue--;
                maxSum++;}
            }
        }

        out.close();
    }

}
