There are n boys and m girls attending a theatre club. To set a play "The Big Bang Theory", they need to choose a group containing exactly t actors containing no less than 4 boys and no less than one girl. How many ways are there to choose a group? Of course, the variants that only differ in the composition of the troupe are considered different.

Perform all calculations in the 64-bit type: long long for С/С++, int64 for Delphi and long for Java.

Input

The only line of the input data contains three integers n, m, t (4 ≤ n ≤ 30, 1 ≤ m ≤ 30, 5 ≤ t ≤ n + m).

Output

Find the required number of ways.

Please do not use the %lld specificator to read or write 64-bit integers in С++. It is preferred to use cin, cout streams or the %I64d specificator.

Examples

Input

5 2 5


Output

10


Input

4 3 5


Output

3
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class CF {public static void main(String[] args){new Solve();}}

class Solve { public Solve(){solve();output();}
    void solve(){try{
        int n = NI();
        int m = NI();
        int t = NI();
        int tN = 4;
        long res = 0;
        while (tN <= n && t - tN >= 1) {
            if (t - tN <= m)
                res += C(n, tN) * C(m, t - tN);
            tN++;
        }
        sout(res);
    }catch(Exception e){e.printStackTrace();}}

    long C(int n, int k) {
        k = min(k, n - k);
        long b = 1;
        for (int i = 1, m = n; i <= k; i++, m--)
            b = b * m / i;
        return b;
    }


    BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
    StringTokenizer st=new StringTokenizer("");StringBuilder output=new StringBuilder();
    final int INF=Integer.MAX_VALUE;final long LINF=Long.MAX_VALUE;double ND()throws Exception{return Double.parseDouble(NS());}
    void inInt(int[]a,int n)throws Exception{for(int i=0;i<n;i++)a[i]=NI();}void inLong(long[]a,int n)throws Exception{for(int i=0;i<n;i++)a[i]=NL();}
    int min(int i1,int i2){return i1<i2?i1:i2;}long min(long i1,long i2){return i1<i2?i1:i2;}
    int max(int i1,int i2){return i1>i2?i1:i2;}long max(long i1,long i2){return i1>i2?i1:i2;}
    String NS()throws Exception{while(!st.hasMoreTokens())st=new StringTokenizer(stdin.readLine());return st.nextToken();}
    int NI()throws Exception{return Integer.parseInt(NS());}long NL()throws Exception{return Long.parseLong(NS());}
    int abs(int x){return x<0?-x:x;}long abs(long x){return x<0?-x:x;}String NLn()throws Exception{return stdin.readLine();}
    int mod(int x,int mod){return(x+mod)%mod;}void output(){System.out.print(output);}void sout(){output.append('\n');}
    void sout(int x){output.append(x).append('\n');}void out(int x){output.append(x);}void sout(StringBuilder x){output.append(x).append('\n');}
    void sout(long x){output.append(x).append('\n');}void out(long x){output.append(x);}void out(StringBuilder x){output.append(x);}
    void sout(char x){output.append(x).append('\n');}void out(char x){output.append(x);}
    void sout(float x){output.append(x).append('\n');}void out(float x){output.append(x);}
    void sout(double x){output.append(x).append('\n');}void out(double x){output.append(x);}
    void sout(String x){output.append(x).append('\n');}void out(String x){output.append(x);}

}
