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.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Hoang
 */
import java.io.*;
import java.util.*;

public class B {

    private static BufferedReader reader;
    private static PrintWriter out;
    private static StringTokenizer tokenizer;
    //private final static String filename = "filename";

    private static void init(InputStream input, OutputStream output) throws IOException {
        reader = new BufferedReader(new InputStreamReader(input));
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output)));
        //reader = new BufferedReader(new FileReader(filename + ".in"));
        //out = new BufferedWriter(new FileWriter(filename + ".out"));
        tokenizer = new StringTokenizer("");
    }

    private static String nextLine() throws IOException {
        return reader.readLine();
    }

    private static String next() throws IOException {
        while (!tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(nextLine());
        }
        return tokenizer.nextToken();
    }

    private static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    private static long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    private static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        init(System.in, System.out);
        int r = nextInt();
        //long startTime = System.currentTimeMillis();
        int g = nextInt();
        int b = nextInt();
        int ans = 0;
        if ((r % 3 == 0 && g % 3 == 0) || (r % 3 == 0 && b % 3 == 0) || (b % 3 == 0 && g % 3 == 0)) {
            ans = r / 3 + g / 3 + b / 3;
        } else if (r % 3 != 0 && g % 3 != 0 && b % 3 != 0) {
            ans = r / 3 + g / 3 + b / 3 + Math.min(Math.min(r % 3, g % 3), b % 3);
        } else if ((r % 3 == 0 && r > 0 && g % 3 + b % 3 == 4) || (g % 3 == 0 && g > 0 && r % 3 + b % 3 == 4) || (b % 3 == 0 && b > 0 && r % 3 + g % 3 == 4)) {
            ans = r / 3 + g / 3 + b / 3 + 1;
        } else {
            ans = r / 3 + g / 3 + b / 3;
        }
        out.println(ans);
        //long runTime = System.currentTimeMillis() - startTime;
        //out.write(runTime + "\n");
        out.close();
        System.exit(0);
    }
}