#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <functional>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <utility>
#include <stack>
#include <queue>
#include <deque>
#include <bitset>
#include <iomanip>
#include <sstream>
#define abs(x) ((x)>0?(x):-(x))
#define sqr(x) ((x)*(x))
#define all(x) x.begin(), x.end()
#define rall(v) v.rbegin(),v.rend()
#define ll long long
#define ull unsigned long long
#define FOR(i,a,b) for(int i=(a); i<(b);i++)
#define FF(i,a) for(int i=0; i<(a);i++)
#define FFD(i,a) for(int i=(a)-1; i>=0;i--)
#define CC(m,what) memset(m,what,sizeof(m))
#define SZ(a) ((int)a.size())
#define viewPP(a,n,m) {puts("---");FF(i,n){FF(j,m) cout<<a[i][j] <<' ';puts("");}}
#define viewP(a, n) {FF(i, n) {cout<<a[i]<<" ";} puts("");}
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
const double eps = 1e-11;
const int inf = 0x7fffffff;
const int hinf = 0x3f3f3f3f;
const double pi = 3.1415926535897932;
int dx[] = {-1, 0, 1, 0};//up Right down Left
int dy[] = {0, 1, 0, -1};
using namespace std;
const int maxn = 1005;
int arr[maxn];
map<int, int> vst;
multimap<int, int> num;
int main(void) {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
int n;
while(scanf("%d", &n) == 1) {
num.clear(), vst.clear();
for(int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
num.insert(make_pair(arr[i], 1));
}
sort(arr, arr+n);
int Max = -inf;
FF(i, n) {
for(int j = i+1; j < n; j++) {
int cut = arr[j] - arr[i];
int ct = 2;
if(!cut)
continue;
if(vst.count(cut) != 0 && vst[cut] >= arr[j]) {
continue;
}
else {
int nxt = arr[j];
while(1) {
nxt += cut;
if(num.find(nxt) != num.end())
ct++;
else break;
};
vst[cut] = nxt-cut;
if(ct > Max) Max = ct;
}
}
}
FF(i, n) {
int ct = num.count(arr[i]);
//cout << arr[i] << " " << ct << endl;
if(ct > Max)
Max = ct;
}
printf("%d\n", Max);
}
return 0;
}