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.IOException;
import java.io.DataInputStream;
import java.math.BigInteger;
import java.util.*;
public class TestClass {
    
    
    static long fact[]=new long[101];
    
    public static void main(String args[] ) throws Exception {
        
       FastReader in=new FastReader();
      int n=in.nextInt();
      int m=in.nextInt();
      int t=in.nextInt();
      long ans=0;
      int j=t-1;
      for(int i=1;i<=m;i++){
         
         if(j>=4){
             ans+=ncr(m,i)*ncr(n,j);
             j--;
         }
         else
             break;
      }
      System.out.println(ans);
      
    }
    static long ncr(int n, int k)
    {
        int C[][] = new int[n + 1][k + 1];
        int i, j;
 
        // Calculate  value of Binomial
        // Coefficient in bottom up manner
        for (i = 0; i <= n; i++) {
            for (j = 0; j <= Math.min(i, k); j++) {
                // Base Cases
                if (j == 0 || j == i)
                    C[i][j] = 1;
 
                // Calculate value using
                // previously stored values
                else
                    C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
            }
        }
 
        return C[n][k];
    }
 
      
 
    


    public static long factorial(long n){
       
        long f=1;
        
        for(int i=1;i<=n;i++){
            f*=i;
        }
        
        return f;
    }
    
    private static class FastReader{
        final private int BUFFER_SIZE = 1 << 16;
        private byte[] buffer;
        private DataInputStream din;
        private int bufferPointer, bytesRead;
        
        public FastReader(){
            buffer = new byte[BUFFER_SIZE];
            din = new DataInputStream(System.in);
            bufferPointer = bytesRead = 0;
        }
        
        private String nextLine() throws IOException{
            StringBuilder sb = new StringBuilder();
            byte c;
            while((c = read()) != -1 && c != '\n'){
                sb.appendCodePoint(c);
            }
            return sb.toString();
        }
        
        private int nextInt() throws IOException{
            int ret = 0;
            byte c = read();
            while(c <= ' '){
                c = read();
            }
            boolean neg = c == '-';
            if(neg){
                c = read();
            }
            while(c >= '0' && c <= '9'){
                ret = ret * 10 + c - '0';
                c = read();
            }
            return (neg) ? -ret : ret;
        }
        
        private long nextLong() throws IOException{
            long ret = 0;
            byte c = read();
            while(c <= ' '){
                c = read();
            }
            boolean neg = c == '-';
            if(neg){
                c = read();
            }
            while(c >= '0' && c <= '9'){
                ret = ret * 10 + c - '0';
                c = read();
            }
            return (neg) ? -ret : ret;
        }
        
        private double nextDouble() throws IOException{
            double ret = 0, div = 1;
            byte c = read();
            while(c <= ' '){
                c = read();
            }
            boolean neg = c == '-';
            if(neg){
                c = read();
            }
            while(c >= '0' && c <= '9'){
                ret = ret * 10 + (c - '0');
                c = read();
            }
            if(c == '.'){
                while((c = read()) >= '0' && c <= '9'){
                    ret += (c - '0') / (div *= 10);
                }
            }
            return (neg) ? -ret : ret;
        }
        
        private void fillBuffer() throws IOException{
            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
            if(bytesRead == -1){
                buffer[0] = -1;
            }
        }
        
        private byte read() throws IOException{
            if(bufferPointer == bytesRead){
                fillBuffer();
            }
            return buffer[bufferPointer++];
        }
        
        private boolean hasNext() throws IOException{
            if(bufferPointer == bytesRead){
                fillBuffer();
            }
            return (buffer[0] != -1);
        }
        
        private void close() throws IOException{
            if(din != null){
                din.close();
            }
        }
        
    }
}