Yash has recently learnt about the Fibonacci sequence and is very excited about it. He calls a sequence Fibonacci-ish if 

  1. the sequence consists of at least two elements 
  2. f0 and f1 are arbitrary 
  3. fn + 2 = fn + 1 + fn for all n ≥ 0. 



You are given some sequence of integers a1, a2, ..., an. Your task is rearrange elements of this sequence in such a way that its longest possible prefix is Fibonacci-ish sequence.

Input

The first line of the input contains a single integer n (2 ≤ n ≤ 1000) — the length of the sequence ai.

The second line contains n integers a1, a2, ..., an (|ai| ≤ 109).

Output

Print the length of the longest possible Fibonacci-ish prefix of the given sequence after rearrangement.

Examples

Input

3
1 2 -1


Output

3


Input

5
28 35 7 14 21


Output

4

Note

In the first sample, if we rearrange elements of the sequence as  - 1, 2, 1, the whole sequence ai would be Fibonacci-ish.

In the second sample, the optimal way to rearrange elements is <image>, <image>, <image>, <image>, 28.
import java.io.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.io.StreamTokenizer;
import java.io.IOException;
import java.util.HashMap;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author lebegio
 */
public class Main {
    public static void main(String[] args) {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        StreamTokenizer in = new StreamTokenizer(inputStream);
        PrintWriter out = new PrintWriter(outputStream);
        TaskD solver = new TaskD();
        solver.solve(1, in, out);
        out.close();
    }

    static class TaskD {
        public StreamTokenizer st;

        public void solve(int testNumber, StreamTokenizer st, PrintWriter out) {
            this.st = st;
            int n = nextInt();
            long[] arr = new long[n];
            IntHashMap valz = new IntHashMap();
            HashSet<Long> posV = new HashSet<>();
            for (int i = 0; i < n; i++) {
                arr[i] = nextLong();
                valz.add(arr[i]);
            }

            int maxL = 2;
            IntHashMap map = new IntHashMap();
            for (int i = 0; i < n; i++) {
                for (int j = i + 1; j < n; j++) {
                    int M = 2;
                    long x = arr[i];
                    long y = arr[j];
                    if (!posV.contains(x + 1000000000 * y)) {
                        posV.add(x + 1000000000 * y);
                        map.clear();
                        map.add(x);
                        map.add(y);
                        while (valz.keySet().contains(x + y) && map.get(x + y) < valz.get(x + y)) {
                            map.add(x + y);
                            y = x + y;
                            x = y - x;
                            M++;
                        }
                        maxL = Math.max(maxL, M);
                    }

                    x = arr[j];
                    y = arr[i];
                    if (!posV.contains(x + 1000000000 * y)) {
                        posV.add(x + 1000000000 * y);
                        map.clear();
                        M = 2;

                        map.add(x);
                        map.add(y);
                        while (valz.keySet().contains(x + y) && map.get(x + y) < valz.get(x + y)) {
                            map.add(x + y);
                            y = x + y;
                            x = y - x;
                            M++;
                        }
                        maxL = Math.max(maxL, M);
                    }

                }
            }
            out.println(maxL);
        }

        int nextInt() {
            try {
                st.nextToken();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return (int) st.nval;
        }

        long nextLong() {
            try {
                st.nextToken();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return (long) st.nval;
        }

    }

    static class IntHashMap extends HashMap<Object, Integer> {

        public Integer get(Object key) {
            Integer v = super.get(key);
            if (v == null) return 0;
            return v;
        }

        public void add(Object obj) {
            super.put(obj, 1 + get(obj));
        }

    }
}

