#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <map>
#include <vector>
using namespace std;
int n;
struct node
{
int l,r;
friend bool operator<(node x,node y)
{
return x.r<y.r;
}
};
long long sum[1505];
long long a[1505];
vector<node> v[1501*1501];
int cnt;
int get(int id,int f)
{
int len=v[id].size();
int ans=0;
int pre=0;
for(int i=0;i<len;i++)
{
if(v[id][i].l>pre)
{
ans++;
pre=v[id][i].r;
if(f==1)
printf("%d %d\n",v[id][i].l,v[id][i].r);
}
}
return ans;
}
int main() {
while(~scanf("%d",&n))
{
memset(sum,0, sizeof(sum));
map<long long,int> mp;
cnt=0;
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]),sum[i]=sum[i-1]+a[i];
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
long long tp=sum[i]-sum[j-1];
if(mp[tp]==0)
mp[tp]=++cnt;
int id=mp[tp];
node cur;cur.l=j;cur.r=i;
v[id].push_back(cur);
}
}
int ans=0,ansid;
for(int i=1;i<=cnt;i++)
{
//sort(v[i].begin(),v[i].end());
int tans=get(i,0);
if(tans>ans)
ans=tans,ansid=i;
}
printf("%d\n",ans);
get(ansid,1);
}
return 0;
}