/*   三玖天下第一！！！  */
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e3,maxm=200;
int n,m,a[maxn+5]={},b[maxn+5][maxm+5]={},maxx[maxm+5]={};
long long ans=0,temp;
inline int dread()
{
	int x=0;bool f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())f^=(ch=='-');
	for(;ch>='0'&&ch<='9';ch=getchar())x=(x<<1)+(x<<3)+(ch^48);
	return f?x:-x;
}
inline void Kaslana()
{
	n=dread();m=dread();
	for(int i=1;i<n;i++) a[i]=dread();
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) b[i][j]=dread();
}
inline void Raiden()
{
	for(int i=1;i<=n;i++) 
	{
		temp=0;
		for(int k=1;k<=m;k++) temp+=(maxx[k]=b[i][k]);
		ans=max(temp,ans);
		for(int j=i+1;j<=n;j++)
		{
			temp-=a[j-1];
			for(int k=1;k<=m;k++) if(b[j][k]>maxx[k]) 
			temp-=maxx[k],temp+=(maxx[k]=b[j][k]);
			ans=max(ans,temp);
		}
	}
}
inline void Zaychik()
{
	printf("%lld\n",ans);
}
int main()
{
    Kaslana(),Raiden(),Zaychik();return 0;
}
