import java.io.*;

/**
* 完全背包问题,基本思路,时间复杂度较高,使用二维数组
*/
     public class ceshi 
        {
    //v为容量,n为种类
    static int v,n;
    //p[]为价格
    static int p[];
    //w[]为价值
    static int w[];
    //转行键入BufferedReader
    public static void main(String[] args)throws Exception
{
    BufferedReader buffer =new BufferedReader(new InputStreamReader(System.in));
    v=Integer.parseInt(buffer.readLine());
    n=Integer.parseInt(buffer.readLine());
    p=new int[n+1];
    w=new int[n+1];
    for(int i=0;i<n;i++)
    {
        String[] ss=buffer.readLine().split(" ");
        p[i+1]=Integer.parseInt(ss[0]);
        w[i+1]=Integer.parseInt(ss[1]);
    }
    max();
}

public static void max()
{
    //f[i][j]为第i 个种类在容量剩余j为时的前面累加的最大价值
    int[][] f=new int[n+1][v+1];
    //i为种类
    for(int i=1;i<=n;i++)
    {
        //遍历到i种类时的剩余容量j
        for(int j=0;j<=v;j++)
        {
            //k为i种类的要取得数量
            for(int k=0;k<=v/p[i];k++)
            {
                if(j>=k*p[i])
                {
                    //f[i][j]为第i-1种类时容量为j-k*p[i]的最优价值加上i种类取K个的价值
                    f[i][j]=Math.max(f[i-1][j-k*p[i]]+k*w[i], f[i][j]);
                }
                else
                {
                    f[i][j]=f[i][j];
                }

            }
        }
    }
    System.out.println(f[n][v]);
}

}